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;