*/
package fr.gouv.finances.dgfip.xemelios.web2.navigate;
-import fr.gouv.finances.dgfip.utils.Pair;
-import fr.gouv.finances.dgfip.utils.Xslt;
-import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
-import fr.gouv.finances.dgfip.utils.xml.transform.CustomURIResolver;
-import fr.gouv.finances.dgfip.xemelios.auth.XemeliosUser;
-import fr.gouv.finances.dgfip.xemelios.common.config.DocumentModel;
-import fr.gouv.finances.dgfip.xemelios.common.config.ElementModel;
-import fr.gouv.finances.dgfip.xemelios.common.config.EtatModel;
-import fr.gouv.finances.dgfip.xemelios.data.DataLayerManager;
-import fr.gouv.finances.dgfip.xemelios.web2.app.XemeliosHelper;
-import fr.gouv.finances.dgfip.xemelios.web2.utils.AttributeHelper;
-import fr.gouv.finances.dgfip.xemelios.web2.utils.StdDispatchAction;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
+
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;
+
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.w3c.dom.Document;
+import fr.gouv.finances.dgfip.utils.Pair;
+import fr.gouv.finances.dgfip.utils.Xslt;
+import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
+import fr.gouv.finances.dgfip.utils.xml.transform.AbstractURIResolver;
+import fr.gouv.finances.dgfip.xemelios.auth.XemeliosUser;
+import fr.gouv.finances.dgfip.xemelios.common.config.DocumentModel;
+import fr.gouv.finances.dgfip.xemelios.common.config.ElementModel;
+import fr.gouv.finances.dgfip.xemelios.common.config.EtatModel;
+import fr.gouv.finances.dgfip.xemelios.data.DataLayerManager;
+import fr.gouv.finances.dgfip.xemelios.web2.app.XemeliosHelper;
+import fr.gouv.finances.dgfip.xemelios.web2.utils.AttributeHelper;
+import fr.gouv.finances.dgfip.xemelios.web2.utils.StdDispatchAction;
+
public class DisplayDocumentAction extends StdDispatchAction {
- private static final Logger logger = Logger.getLogger(DisplayDocumentAction.class);
-
- @Override
- public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
- logger.debug(request.getQueryString());
- Hashtable<String,Object> parameters = new Hashtable<String,Object>();
- String documentId=null, etatId=null, elementId = null, docId = null;
- String collectiviteCode=null, budgetCode=null, collectiviteLib=null, budgetLib=null;
- String sk1=null, sk2=null;
- HttpSession session = request.getSession();
- XemeliosUser user = AttributeHelper.getUser(session);
-
- for(Enumeration<String> names=request.getParameterNames();names.hasMoreElements();) {
- String paramName = names.nextElement();
- if(paramName.startsWith("xsl-param:")) {
- String xslParamName = paramName.substring("xsl-param:".length());
- String paramValue = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- parameters.put(xslParamName,paramValue);
- } else if(paramName.equals("xsl:param")) {
- // ignore it here
- } else if("elementId".equals(paramName)) {
- elementId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("etatId".equals(paramName)) {
- etatId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("documentId".equals(paramName)) {
- documentId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("docId".equals(paramName)) {
- docId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("collectivite".equals(paramName)) {
- collectiviteCode = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("budget".equals(paramName)) {
- budgetCode = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("coll-lib".equals(paramName)) {
- collectiviteLib = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("budg-lib".equals(paramName)) {
- budgetLib = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("sp1".equals(paramName)) {
- sk1 = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- } else if("sp2".equals(paramName)) {
- sk2 = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
- }
- }
- String[] xslParamsArray = request.getParameterValues("xsl:param");
- if(xslParamsArray!=null) {
- for(String xslParam:xslParamsArray) {
- int virg = xslParam.indexOf(',');
- String pName = xslParam.substring(1,virg);
- String pValue = URLDecoder.decode(xslParam,"UTF-8").substring(virg+1,xslParam.length()-1);
- parameters.put(pName,pValue);
- }
- }
-
- Pair collectivite = new Pair(collectiviteCode,collectiviteLib);
- Pair budget = new Pair(budgetCode,budgetLib);
-
- if(docId!=null && etatId!=null && elementId!=null) {
- DocumentModel documentModel = XemeliosHelper.getDocumentModel(docId);
- if(documentModel==null) throw new IllegalArgumentException("docId parameter ("+docId+") does not correspond to an existing document id.");
- EtatModel etatModel = documentModel.getEtatById(etatId);
- if(etatModel==null) throw new IllegalArgumentException("etatId parameter ("+etatId+") does not correspond to an existing etat id within "+documentId+" document.");
- ElementModel elementModel = etatModel.getElementById(elementId);
- if(elementModel==null) throw new IllegalArgumentException("elementId parameter ("+elementId+") does not correspond to an existing element id within "+documentId+" document / "+etatId+" etat.");
-
- XPath xp = XPathFactory.newInstance().newXPath();
- xp.setNamespaceContext(documentModel.getNamespaces());
- Document doc = null;
- if(sk1==null && sk2==null)
- doc = DataLayerManager.getImplementation().getDocumentAsDom(etatModel, collectivite, budget, documentId, user);
- else {
- ArrayList<String> docs = DataLayerManager.getImplementation().getDocumentListFromSpecialKeys(elementModel, collectivite.key, budget.key, sk1, sk2, null, user);
- if(docs.size()==1) {
- doc = DataLayerManager.getImplementation().getDocumentAsDom(etatModel, collectivite, budget, docs.get(0), user);
- } else if(docs.size()==0) {
- throw new Exception("Document introuvable");
- } else {
- throw new Exception("Plusieurs documents répondent à ces critères");
- }
- }
- if(doc==null) throw new Exception("Document introuvable: "+docId);
- String idRepository = null;
- if(documentModel.getReferenceNomenclaturePath()!=null && documentModel.getReferenceNomenclaturePath().getCodePath()!=null) {
- idRepository = (String)xp.evaluate(documentModel.getReferenceNomenclaturePath().getCodePath().getPath(),doc.getDocumentElement(),XPathConstants.STRING);
- }
- if(idRepository!=null && !(idRepository.length()>0)){
- idRepository=null;
- }
-
- Document repository = DataLayerManager.getImplementation().getRepositoryAsDom(documentModel,collectivite,idRepository,user);
- if(repository!=null)
- parameters.put("repository",repository);
- parameters.put("config",XemeliosHelper.getDocumentsModel().getSmallDOM());
- parameters.put("collectivite",collectiviteCode);
- parameters.put("budget",budgetCode);
- if(collectivite.libelle!=null)
- parameters.put("collectivite-lib",collectivite.libelle);
- if(budget.libelle!=null)
- parameters.put("budget-lib",budget.libelle);
- parameters.put("browser-destination", "internal"); // il faut une destination "internal" pour avoir les liens.
- File f = Xslt.getFile(documentModel, etatModel, elementModel, doc);
- InputStream is = new FileInputStream(f);
- TransformerFactory tFactory = FactoryProvider.getTransformerFactory();
- tFactory.setURIResolver(new CustomURIResolver(tFactory.getURIResolver(), f.getParentFile().toURI().toURL().toExternalForm()));
- Transformer firstTrans = tFactory.newTransformer(new StreamSource(is));
- logger.debug("firstTrans="+firstTrans);
- for(String key:parameters.keySet()) {
- if(key!=null) {
- if(parameters.get(key)!=null) {
- logger.debug("passing xsl param: "+key+","+parameters.get(key));
- firstTrans.setParameter(key, parameters.get(key));
- }
- }
- }
- firstTrans.setParameter("config", XemeliosHelper.getDocumentsModel().getSmallDOM());
- firstTrans.setParameter("displayedDocId", docId);
- /* Ajout d'un paramètre pour l'impression*/
-// firstTrans.setParameter("is.web", "1");
- firstTrans.setParameter("context.path", request.getContextPath());
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- firstTrans.transform(new DOMSource(doc), new StreamResult(baos));
- is.close();
-
- File xslFile = new File(getServlet().getServletContext().getRealPath("/utils/href-converter.xsl"));
-
- tFactory = FactoryProvider.getTransformerFactory();
- Transformer transformer = tFactory.newTransformer(new StreamSource(xslFile));
- transformer.setParameter("server",request.getServerName());
- transformer.setParameter("context",request.getContextPath());
- transformer.setParameter("port",request.getServerPort());
- transformer.setParameter("navigationId", request.getParameter("navigationId"));
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- AttributeHelper.setPreviousView(session,request.getParameter("navigationId"), request.getServletPath()+"?"+request.getQueryString());
- transformer.transform(new StreamSource(bais), new StreamResult(response.getOutputStream()));
- }
- return null;
- }
+ private static final Logger logger = Logger.getLogger(DisplayDocumentAction.class);
+
+ @Override
+ public ActionForward unspecified(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
+ DisplayDocumentAction.logger.debug(request.getQueryString());
+ final Hashtable<String, Object> parameters = new Hashtable<String, Object>();
+ String documentId = null, etatId = null, elementId = null, docId = null;
+ String collectiviteCode = null, budgetCode = null, collectiviteLib = null, budgetLib = null;
+ String sk1 = null, sk2 = null;
+ final HttpSession session = request.getSession();
+ final XemeliosUser user = AttributeHelper.getUser(session);
+
+ for (final Enumeration<String> names = request.getParameterNames(); names.hasMoreElements();) {
+ final String paramName = names.nextElement();
+ if (paramName.startsWith("xsl-param:")) {
+ final String xslParamName = paramName.substring("xsl-param:".length());
+ final String paramValue = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ parameters.put(xslParamName, paramValue);
+ } else if (paramName.equals("xsl:param")) {
+ // ignore it here
+ } else if ("elementId".equals(paramName)) {
+ elementId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("etatId".equals(paramName)) {
+ etatId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("documentId".equals(paramName)) {
+ documentId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("docId".equals(paramName)) {
+ docId = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("collectivite".equals(paramName)) {
+ collectiviteCode = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("budget".equals(paramName)) {
+ budgetCode = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("coll-lib".equals(paramName)) {
+ collectiviteLib = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("budg-lib".equals(paramName)) {
+ budgetLib = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("sp1".equals(paramName)) {
+ sk1 = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ } else if ("sp2".equals(paramName)) {
+ sk2 = URLDecoder.decode(request.getParameter(paramName), "UTF-8").trim();
+ }
+ }
+ final String[] xslParamsArray = request.getParameterValues("xsl:param");
+ if (xslParamsArray != null) {
+ for (final String xslParam : xslParamsArray) {
+ final int virg = xslParam.indexOf(',');
+ final String pName = xslParam.substring(1, virg);
+ final String pValue = URLDecoder.decode(xslParam, "UTF-8").substring(virg + 1, xslParam.length() - 1);
+ parameters.put(pName, pValue);
+ }
+ }
+
+ final Pair collectivite = new Pair(collectiviteCode, collectiviteLib);
+ final Pair budget = new Pair(budgetCode, budgetLib);
+
+ if ((docId != null) && (etatId != null) && (elementId != null)) {
+ final DocumentModel documentModel = XemeliosHelper.getDocumentModel(docId);
+ if (documentModel == null) {
+ throw new IllegalArgumentException("docId parameter (" + docId + ") does not correspond to an existing document id.");
+ }
+ final EtatModel etatModel = documentModel.getEtatById(etatId);
+ if (etatModel == null) {
+ throw new IllegalArgumentException("etatId parameter (" + etatId + ") does not correspond to an existing etat id within " + documentId + " document.");
+ }
+ final ElementModel elementModel = etatModel.getElementById(elementId);
+ if (elementModel == null) {
+ throw new IllegalArgumentException("elementId parameter (" + elementId + ") does not correspond to an existing element id within " + documentId + " document / " + etatId + " etat.");
+ }
+
+ final XPath xp = XPathFactory.newInstance().newXPath();
+ xp.setNamespaceContext(documentModel.getNamespaces());
+ Document doc = null;
+ if ((sk1 == null) && (sk2 == null)) {
+ doc = DataLayerManager.getImplementation().getDocumentAsDom(etatModel, collectivite, budget, documentId, user);
+ } else {
+ final ArrayList<String> docs = DataLayerManager.getImplementation().getDocumentListFromSpecialKeys(elementModel, collectivite.key, budget.key, sk1, sk2, null, user);
+ if (docs.size() == 1) {
+ doc = DataLayerManager.getImplementation().getDocumentAsDom(etatModel, collectivite, budget, docs.get(0), user);
+ } else if (docs.size() == 0) {
+ throw new Exception("Document introuvable");
+ } else {
+ throw new Exception("Plusieurs documents répondent à ces critères");
+ }
+ }
+ if (doc == null) {
+ throw new Exception("Document introuvable: " + docId);
+ }
+ String idRepository = null;
+ if ((documentModel.getReferenceNomenclaturePath() != null) && (documentModel.getReferenceNomenclaturePath().getCodePath() != null)) {
+ idRepository = (String) xp.evaluate(documentModel.getReferenceNomenclaturePath().getCodePath().getPath(), doc.getDocumentElement(), XPathConstants.STRING);
+ }
+ if ((idRepository != null) && !(idRepository.length() > 0)) {
+ idRepository = null;
+ }
+
+ final Document repository = DataLayerManager.getImplementation().getRepositoryAsDom(documentModel, collectivite, idRepository, user);
+ if (repository != null) {
+ parameters.put("repository", repository);
+ }
+ parameters.put("config", XemeliosHelper.getDocumentsModel().getSmallDOM());
+ parameters.put("collectivite", collectiviteCode);
+ parameters.put("budget", budgetCode);
+ if (collectivite.libelle != null) {
+ parameters.put("collectivite-lib", collectivite.libelle);
+ }
+ if (budget.libelle != null) {
+ parameters.put("budget-lib", budget.libelle);
+ }
+ parameters.put("browser-destination", "internal"); // il faut une destination "internal" pour avoir les liens.
+ final File f = Xslt.getFile(documentModel, etatModel, elementModel, doc);
+ final InputStream is = new FileInputStream(f);
+
+ TransformerFactory tFactory = FactoryProvider.getTransformerFactory();
+ final AbstractURIResolver uriResolver = documentModel.createUriResolver();
+ AbstractURIResolver.initializationHelper(uriResolver, doc, tFactory.getURIResolver(), f.getParentFile().toURI().toURL().toExternalForm());
+ tFactory.setURIResolver(uriResolver);
+
+ final Transformer firstTrans = tFactory.newTransformer(new StreamSource(is));
+ DisplayDocumentAction.logger.debug("firstTrans=" + firstTrans);
+ for (final String key : parameters.keySet()) {
+ if (key != null) {
+ if (parameters.get(key) != null) {
+ DisplayDocumentAction.logger.debug("passing xsl param: " + key + "," + parameters.get(key));
+ firstTrans.setParameter(key, parameters.get(key));
+ }
+ }
+ }
+ firstTrans.setParameter("config", XemeliosHelper.getDocumentsModel().getSmallDOM());
+ firstTrans.setParameter("displayedDocId", docId);
+ /* Ajout d'un paramètre pour l'impression */
+ // firstTrans.setParameter("is.web", "1");
+ firstTrans.setParameter("context.path", request.getContextPath());
+
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ firstTrans.transform(new DOMSource(doc), new StreamResult(baos));
+ is.close();
+
+ final File xslFile = new File(this.getServlet().getServletContext().getRealPath("/utils/href-converter.xsl"));
+
+ tFactory = FactoryProvider.getTransformerFactory();
+ final Transformer transformer = tFactory.newTransformer(new StreamSource(xslFile));
+ transformer.setParameter("server", request.getServerName());
+ transformer.setParameter("context", request.getContextPath());
+ transformer.setParameter("port", request.getServerPort());
+ transformer.setParameter("navigationId", request.getParameter("navigationId"));
+ final ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ AttributeHelper.setPreviousView(session, request.getParameter("navigationId"), request.getServletPath() + "?" + request.getQueryString());
+ transformer.transform(new StreamSource(bais), new StreamResult(response.getOutputStream()));
+ }
+ return null;
+ }
}
import fr.gouv.finances.dgfip.utils.Pair;
import fr.gouv.finances.dgfip.utils.Xslt;
import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
-import fr.gouv.finances.dgfip.utils.xml.transform.CustomURIResolver;
+import fr.gouv.finances.dgfip.utils.xml.transform.AbstractURIResolver;
import fr.gouv.finances.dgfip.xemelios.auth.UnauthorizedException;
import fr.gouv.finances.dgfip.xemelios.auth.XemeliosUser;
import fr.gouv.finances.dgfip.xemelios.common.config.DocumentModel;
private static final Logger logger = Logger.getLogger(NavigateAction.class);
@Override
- public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
- logger.debug(request.getContextPath() + request.getQueryString());
- HttpSession session = request.getSession();
+ public ActionForward unspecified(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, final HttpServletResponse response) throws Exception {
+ NavigateAction.logger.debug(request.getContextPath() + request.getQueryString());
+ final HttpSession session = request.getSession();
// StringBuilder sb = new StringBuilder();
// sb.append("session is ").append(session.isNew()?"":"not ").append("new\n");
// sb.append("sesssion contains :\n");
// sb.append("\t").append(key).append("=").append(session.getAttribute(key).toString()).append("\n");
// }
// logger.debug(sb.toString());
- XemeliosUser user = AttributeHelper.getUser(session);
- XPathFactory xpf = new XPathFactoryImpl();
+ final XemeliosUser user = AttributeHelper.getUser(session);
+ final XPathFactory xpf = new XPathFactoryImpl();
- String docId = request.getParameter("docId");
- String etatId = request.getParameter("etatId");
- String elementId = request.getParameter("elementId");
- String collectivite = request.getParameter("collectivite");
- String budget = request.getParameter("budget");
+ final String docId = request.getParameter("docId");
+ final String etatId = request.getParameter("etatId");
+ final String elementId = request.getParameter("elementId");
+ final String collectivite = request.getParameter("collectivite");
+ final String budget = request.getParameter("budget");
String path = request.getParameter("path");
- String sp1 = request.getParameter("sp1");
- String sp2 = request.getParameter("sp2");
- String sp3 = request.getParameter("sp3");
- String[] xslParamsArray = request.getParameterValues("xsl:param");
+ final String sp1 = request.getParameter("sp1");
+ final String sp2 = request.getParameter("sp2");
+ final String sp3 = request.getParameter("sp3");
+ final String[] xslParamsArray = request.getParameterValues("xsl:param");
- if (docId == null || docId.length() == 0)
+ if ((docId == null) || (docId.length() == 0)) {
throw new IllegalArgumentException("parameter docId is not specified");
-
- DocumentModel documentModel = XemeliosHelper.getDocumentModel(docId);
- if (documentModel == null)
+ }
+
+ final DocumentModel documentModel = XemeliosHelper.getDocumentModel(docId);
+ if (documentModel == null) {
throw new IllegalArgumentException(docId + " is not a valid document ID");
-
- if (etatId == null || etatId.length() == 0)
+ }
+
+ if ((etatId == null) || (etatId.length() == 0)) {
throw new IllegalArgumentException("parameter etatId is not specified");
-
- EtatModel etatModel = documentModel.getEtatById(etatId);
- if (etatModel == null)
+ }
+
+ final EtatModel etatModel = documentModel.getEtatById(etatId);
+ if (etatModel == null) {
throw new IllegalArgumentException(etatId + " is not a valid etat ID within " + documentModel.getTitre());
-
+ }
+
ElementModel elementModel = null;
- if (elementId == null || elementId.length() == 0) {
+ if ((elementId == null) || (elementId.length() == 0)) {
elementModel = etatModel.getBrowsableElement();
- if (elementModel == null)
+ if (elementModel == null) {
throw new IllegalArgumentException("parameter elementId is not specified and " + documentModel.getId() + "." + etatModel.getId() + " does not define a browsable element");
+ }
} else {
elementModel = etatModel.getElementById(elementId);
}
-
- if (elementModel == null)
+
+ if (elementModel == null) {
throw new IllegalArgumentException(elementId + " is not a valid element ID within " + documentModel.getTitre() + " / " + etatModel.getTitre());
- if (collectivite == null || collectivite.length() == 0)
+ }
+ if ((collectivite == null) || (collectivite.length() == 0)) {
throw new IllegalArgumentException("parameter collectivite is not specified");
-
-
+ }
+
// TODO: mettre la hierarchie des collectivites
// TODO: creer une getCollectiviteByCode
- Vector<Pair> collectivites = DataLayerManager.getImplementation().getCollectivites(documentModel, null, user);
+ final Vector<Pair> collectivites = DataLayerManager.getImplementation().getCollectivites(documentModel, null, user);
Pair coll = null;
- for (Pair p : collectivites) {
+ for (final Pair p : collectivites) {
if (p.key.equals(collectivite)) {
coll = p;
break;
}
}
- if (coll == null)
+ if (coll == null) {
throw new UnauthorizedException("La collectivité " + collectivite + " n'est pas dans votre périmètre d'autorisation");
-
- if (budget == null || budget.length() == 0)
+ }
+
+ if ((budget == null) || (budget.length() == 0)) {
throw new IllegalArgumentException("parameter budget is no specified");
-
- Vector<Pair> budgets = DataLayerManager.getImplementation().getBudgets(documentModel, coll, user);
+ }
+
+ final Vector<Pair> budgets = DataLayerManager.getImplementation().getBudgets(documentModel, coll, user);
Pair budg = null;
- for (Pair p : budgets) {
+ for (final Pair p : budgets) {
if (p.key.equals(budget)) {
budg = p;
break;
}
}
- if (budg == null)
+ if (budg == null) {
throw new IllegalArgumentException(budget + " is not a valid budget ID within collectivite " + collectivite);
+ }
String documentId = null;
String errorMessage = null;
if (path == null) {
- ArrayList<String> documents = DataLayerManager.getImplementation().getDocumentListFromSpecialKeys(elementModel, coll.key, budg.key, sp1, sp2, null, user);
+ final ArrayList<String> documents = DataLayerManager.getImplementation().getDocumentListFromSpecialKeys(elementModel, coll.key, budg.key, sp1, sp2, null, user);
if (documents.size() == 0) {
errorMessage = "Le document est introuvable";
- } else if (documents.size() > 1 && !etatModel.isMultiPage()) {
+ } else if ((documents.size() > 1) && !etatModel.isMultiPage()) {
errorMessage = "Plusieurs documents répondant à ces critères ont été trouvés.";
} else {
documentId = documents.get(0);
String _path = new String(path);
int pos = _path.indexOf('%');
while (pos >= 0) {
- int closing = _path.indexOf('%', pos + 1);
- if (closing < 0)
+ final int closing = _path.indexOf('%', pos + 1);
+ if (closing < 0) {
throw new RuntimeException("a '%' is not closed! : " + _path);
- String paramName = _path.substring(pos + 1, closing);
- if (request.getParameter(paramName) != null && request.getParameter(paramName).length() > 0) {
- String begin = _path.substring(0, pos);
- String end = _path.substring(closing + 1);
- String replacedValue = request.getParameter(paramName);
+ }
+ final String paramName = _path.substring(pos + 1, closing);
+ if ((request.getParameter(paramName) != null) && (request.getParameter(paramName).length() > 0)) {
+ final String begin = _path.substring(0, pos);
+ final String end = _path.substring(closing + 1);
+ final String replacedValue = request.getParameter(paramName);
_path = begin.concat(replacedValue).concat(end);
pos = _path.indexOf('%', pos);
} else {
}
path = _path;
- if (path != null && path.startsWith("[")) {
+ if ((path != null) && path.startsWith("[")) {
path = elementModel.getPath().getFormattedPath() + path;
}
- ArrayList<String> documents = DataLayerManager.getImplementation().getDocumentListFromXPath(elementModel, coll.key, budg.key, sp1, sp2, null, path, user);
+ final ArrayList<String> documents = DataLayerManager.getImplementation().getDocumentListFromXPath(elementModel, coll.key, budg.key, sp1, sp2, null, path, user);
if (documents.size() == 0) {
// errorMessage = "Le document est introuvable";
errorMessage = "Aucun " + documentModel.getEtatById(etatId).getTitre() + " trouvé";
- } else if (documents.size() > 1 && !etatModel.isMultiPage()) {
+ } else if ((documents.size() > 1) && !etatModel.isMultiPage()) {
errorMessage = "Plusieurs documents répondant à ces critères ont été trouvés.";
} else {
documentId = documents.get(0);
}
if (documentId != null) {
// logger.debug("found "+documentId);
- Document doc = DataLayerManager.getImplementation().getDocumentAsDom(etatModel, coll, budg, documentId, user);
- File f = Xslt.getFile(documentModel, etatModel, elementModel, doc);
- InputStream is = IoUtils.getInputStream(f.getPath());
- Hashtable<String, Object> parameters = new Hashtable<String, Object>();
+ final Document doc = DataLayerManager.getImplementation().getDocumentAsDom(etatModel, coll, budg, documentId, user);
+ final File f = Xslt.getFile(documentModel, etatModel, elementModel, doc);
+ final InputStream is = IoUtils.getInputStream(f.getPath());
+ final Hashtable<String, Object> parameters = new Hashtable<String, Object>();
if (xslParamsArray != null) {
- for (String xslParam : xslParamsArray) {
- int virg = xslParam.indexOf(',');
- String pName = xslParam.substring(1, virg);
+ for (final String xslParam : xslParamsArray) {
+ final int virg = xslParam.indexOf(',');
+ final String pName = xslParam.substring(1, virg);
String pValue = xslParam.substring(virg + 1, xslParam.length() - 1);
int pos2 = pValue.indexOf('%'); // interprétation des xsl:param avec valeurs de formulaires
while (pos2 >= 0) {
- int closing = pValue.indexOf('%', pos2 + 1);
- if (closing < 0)
+ final int closing = pValue.indexOf('%', pos2 + 1);
+ if (closing < 0) {
throw new RuntimeException("a '%' is not closed! : " + pValue);
- String paramNam = pValue.substring(pos2 + 1, closing);
+ }
+ final String paramNam = pValue.substring(pos2 + 1, closing);
if (request.getParameter(paramNam) != null) {
- String begin = pValue.substring(0, pos2);
- String end = pValue.substring(closing + 1);
- String replacedValue = request.getParameter(paramNam);
+ final String begin = pValue.substring(0, pos2);
+ final String end = pValue.substring(closing + 1);
+ final String replacedValue = request.getParameter(paramNam);
pValue = begin.concat(replacedValue).concat(end);
pos2 = pValue.indexOf('%', pos2);
} else {
}
}
parameters.put(pName, pValue);
- logger.debug("Adding xsl:param(" + pName + "," + pValue + ")");
+ NavigateAction.logger.debug("Adding xsl:param(" + pName + "," + pValue + ")");
}
}
parameters.put("browser-destination", "internal"); // il faut une destination "internal" pour avoir les liens.
- XPath xp = xpf.newXPath();
+ final XPath xp = xpf.newXPath();
xp.setNamespaceContext(documentModel.getNamespaces());
String idRepository = null;
- if (documentModel.getReferenceNomenclaturePath() != null && documentModel.getReferenceNomenclaturePath().getCodePath() != null) {
+ if ((documentModel.getReferenceNomenclaturePath() != null) && (documentModel.getReferenceNomenclaturePath().getCodePath() != null)) {
idRepository = (String) xp.evaluate(documentModel.getReferenceNomenclaturePath().getCodePath().getPath(), doc.getDocumentElement(), XPathConstants.STRING);
}
- if (idRepository != null && idRepository.length() == 0)
+ if ((idRepository != null) && (idRepository.length() == 0)) {
idRepository = null;
- Document repository = DataLayerManager.getImplementation().getRepositoryAsDom(documentModel, coll, idRepository, user);
- if (repository != null)
+ }
+ final Document repository = DataLayerManager.getImplementation().getRepositoryAsDom(documentModel, coll, idRepository, user);
+ if (repository != null) {
parameters.put("repository", repository);
+ }
// on passe la config
parameters.put("config", XemeliosHelper.getDocumentsModel().getSmallDOM());
parameters.put("collectivite", collectivite);
parameters.put("budget", budget);
+
TransformerFactory tFactory = FactoryProvider.getTransformerFactory();
- tFactory.setURIResolver(new CustomURIResolver(tFactory.getURIResolver(), f.getParentFile().toURI().toURL().toExternalForm()));
- Transformer transformer = tFactory.newTransformer(new StreamSource(f));
- for (String pName : parameters.keySet()) {
- logger.info("passing xsl param: (" + pName + "," + parameters.get(pName) + ")");
+ final AbstractURIResolver uriResolver = documentModel.createUriResolver();
+ AbstractURIResolver.initializationHelper(uriResolver, doc, tFactory.getURIResolver(), f.getParentFile().toURI().toURL().toExternalForm());
+ tFactory.setURIResolver(uriResolver);
+
+ final Transformer transformer = tFactory.newTransformer(new StreamSource(f));
+ for (final String pName : parameters.keySet()) {
+ NavigateAction.logger.info("passing xsl param: (" + pName + "," + parameters.get(pName) + ")");
transformer.setParameter(pName, parameters.get(pName));
}
/* Ajout d'un paramètre pour l'impression */
// transformer.setParameter("is.web", "1");
transformer.setParameter("context.path", request.getContextPath());
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
transformer.transform(new DOMSource(doc), new StreamResult(baos));
- File xslFile = new File(getServlet().getServletContext().getRealPath("/utils/href-converter.xsl"));
+ final File xslFile = new File(this.getServlet().getServletContext().getRealPath("/utils/href-converter.xsl"));
tFactory = FactoryProvider.getTransformerFactory();
- Transformer secondTransformer = tFactory.newTransformer(new StreamSource(xslFile));
+ final Transformer secondTransformer = tFactory.newTransformer(new StreamSource(xslFile));
secondTransformer.setParameter("server", request.getServerName());
secondTransformer.setParameter("context", request.getContextPath());
secondTransformer.setParameter("port", request.getServerPort());
secondTransformer.setParameter("navigationId", request.getParameter("navigationId"));
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
+ final ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
AttributeHelper.setPreviousView(session, request.getParameter("navigationId"), request.getServletPath() + "?" + request.getQueryString());
secondTransformer.transform(new StreamSource(bais), new StreamResult(response.getOutputStream()));
} else {
- String url = AttributeHelper.getPreviousView(session, request.getParameter("navigationId")).concat("&xsl:param=(error.message,").concat(StringEscapeUtils.escapeJavaScript(errorMessage)).concat(")");
+ final String url = AttributeHelper.getPreviousView(session, request.getParameter("navigationId")).concat("&xsl:param=(error.message,").concat(StringEscapeUtils.escapeJavaScript(errorMessage)).concat(")");
return new ActionForward(url, true);
}
return null;