From: Mathieu Baudier Date: Wed, 5 Sep 2012 10:44:46 +0000 (+0000) Subject: Restructure node distirbution X-Git-Tag: argeo-commons-2.1.30~845 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=615bcb2bf7937888af7631cb3319d8c55b275fa9;p=lgpl%2Fargeo-commons.git Restructure node distirbution git-svn-id: https://svn.argeo.org/commons/trunk@5555 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/security/dep/org.argeo.security.dep.node/pom.xml b/security/dep/org.argeo.security.dep.node/pom.xml index e55a78702..5a265ae9a 100644 --- a/security/dep/org.argeo.security.dep.node/pom.xml +++ b/security/dep/org.argeo.security.dep.node/pom.xml @@ -28,6 +28,18 @@ + + + org.argeo.commons.server + org.argeo.node.repo.jackrabbit + 1.1.4-SNAPSHOT + + + org.argeo.commons.server + org.argeo.node.repofactory.jackrabbit + 1.1.4-SNAPSHOT + + org.argeo.commons.base @@ -49,11 +61,6 @@ org.argeo.security.core 1.1.4-SNAPSHOT - - org.argeo.commons.security - org.argeo.security.mvc - 1.1.4-SNAPSHOT - @@ -75,6 +82,16 @@ javax.mail + + + org.argeo.tp + bcprov + + + org.argeo.tp + bcmail + + org.argeo.tp @@ -98,18 +115,6 @@ org.argeo.tp org.springframework.context.support - - - - - - - - - - org.argeo.tp - org.springframework.jms - @@ -128,34 +133,6 @@ org.argeo.security.jackrabbit 1.1.4-SNAPSHOT - - org.argeo.commons.server - org.argeo.node.repo.jackrabbit - 1.1.4-SNAPSHOT - - - org.argeo.commons.server - org.argeo.node.repofactory.jackrabbit - 1.1.4-SNAPSHOT - - - - - org.argeo.commons.server - org.argeo.server.dep.activemq - 1.1.4-SNAPSHOT - pom - - - org.argeo.commons.security - org.argeo.security.activemq - 1.1.4-SNAPSHOT - - - org.argeo.commons.server - org.argeo.server.activemq.broker - 1.1.4-SNAPSHOT - @@ -227,49 +204,36 @@ 1.1.4-SNAPSHOT - + - org.argeo.commons.server - org.argeo.server.dep.ads - 1.1.4-SNAPSHOT - pom + org.argeo.tp + org.h2 - org.argeo.commons.server - org.argeo.server.ads.server - 1.1.4-SNAPSHOT + org.argeo.tp + com.mysql.jdbc - org.argeo.commons.server - org.argeo.server.ads - 1.1.4-SNAPSHOT + org.argeo.tp + org.postgresql.jdbc3 - - - - - - + org.argeo.commons.server - org.argeo.server.dep.hibernate + org.argeo.server.dep.ads 1.1.4-SNAPSHOT pom - - - - org.argeo.tp - org.h2 - - org.argeo.tp - com.mysql.jdbc + org.argeo.commons.server + org.argeo.server.ads.server + 1.1.4-SNAPSHOT - org.argeo.tp - org.postgresql.jdbc3 + org.argeo.commons.server + org.argeo.server.ads + 1.1.4-SNAPSHOT diff --git a/security/runtime/org.argeo.security.mvc/.classpath b/security/runtime/org.argeo.security.mvc/.classpath deleted file mode 100644 index ff41fbb4d..000000000 --- a/security/runtime/org.argeo.security.mvc/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/security/runtime/org.argeo.security.mvc/.project b/security/runtime/org.argeo.security.mvc/.project deleted file mode 100644 index b287d0835..000000000 --- a/security/runtime/org.argeo.security.mvc/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - org.argeo.security.mvc - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.pde.PluginNature - - diff --git a/security/runtime/org.argeo.security.mvc/.settings/org.eclipse.jdt.core.prefs b/security/runtime/org.argeo.security.mvc/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index d2110d0b1..000000000 --- a/security/runtime/org.argeo.security.mvc/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,5 +0,0 @@ -#Tue Sep 15 11:35:07 CEST 2009 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.source=1.5 diff --git a/security/runtime/org.argeo.security.mvc/.settings/org.maven.ide.eclipse.prefs b/security/runtime/org.argeo.security.mvc/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index 2169c4308..000000000 --- a/security/runtime/org.argeo.security.mvc/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,9 +0,0 @@ -#Tue Sep 15 11:35:01 CEST 2009 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals=process-test-resources -includeModules=false -resolveWorkspaceProjects=true -resourceFilterGoals=process-resources resources\:testResources -skipCompilerPlugin=true -version=1 diff --git a/security/runtime/org.argeo.security.mvc/build.properties b/security/runtime/org.argeo.security.mvc/build.properties deleted file mode 100644 index a740a346d..000000000 --- a/security/runtime/org.argeo.security.mvc/build.properties +++ /dev/null @@ -1,2 +0,0 @@ -additional.bundles = org.springframework.beans -source.. = src/main/java/ diff --git a/security/runtime/org.argeo.security.mvc/pom.xml b/security/runtime/org.argeo.security.mvc/pom.xml deleted file mode 100644 index 85cd0d799..000000000 --- a/security/runtime/org.argeo.security.mvc/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - 4.0.0 - - org.argeo.commons.security - runtime - 1.1.4-SNAPSHOT - .. - - org.argeo.security.mvc - Commons Security MVC - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - org.apache.felix - maven-bundle-plugin - - - - - org.argeo.security.mvc.* - - *,javax.servlet - - - - - - - - - org.argeo.commons.server - org.argeo.server.core - 1.1.4-SNAPSHOT - - - - - org.argeo.commons.security - org.argeo.security.core - 1.1.4-SNAPSHOT - - - - - org.argeo.tp - org.springframework.web.servlet - - - org.argeo.tp - org.springframework.aop - - - - - org.argeo.tp - javax.servlet - - - - \ No newline at end of file diff --git a/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/ArgeoRememberMeServices.java b/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/ArgeoRememberMeServices.java deleted file mode 100644 index fde9f3034..000000000 --- a/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/ArgeoRememberMeServices.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.security.mvc; - -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.security.ui.rememberme.TokenBasedRememberMeServices; - -public class ArgeoRememberMeServices extends TokenBasedRememberMeServices { - public final static String DEFAULT_COOKIE_NAME = "ARGEO_SECURITY"; - - public ArgeoRememberMeServices() { - setCookieName(DEFAULT_COOKIE_NAME); - } - - /** - * Sets a "cancel cookie" (with maxAge = 0) on the response to disable - * persistent logins. - * - * @param request - * @param response - */ - protected void cancelCookie(HttpServletRequest request, - HttpServletResponse response) { - Cookie cookie = new Cookie(getCookieName(), null); - cookie.setMaxAge(0); - cookie.setPath("/"); - - response.addCookie(cookie); - } - - /** - * Sets the cookie on the response - * - * @param tokens - * the tokens which will be encoded to make the cookie value. - * @param maxAge - * the value passed to {@link Cookie#setMaxAge(int)} - * @param request - * the request - * @param response - * the response to add the cookie to. - */ - protected void setCookie(String[] tokens, int maxAge, - HttpServletRequest request, HttpServletResponse response) { - String cookieValue = encodeCookie(tokens); - Cookie cookie = new Cookie(getCookieName(), cookieValue); - cookie.setMaxAge(maxAge); - cookie.setPath("/"); - response.addCookie(cookie); - } - -} diff --git a/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/ArgeoUserInterceptor.java b/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/ArgeoUserInterceptor.java deleted file mode 100644 index fd83e9f73..000000000 --- a/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/ArgeoUserInterceptor.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.security.mvc; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.argeo.security.UserAdminService; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; - -/** Add the current argeo user as an attribute to the request. */ -public class ArgeoUserInterceptor extends HandlerInterceptorAdapter { - private UserAdminService securityService; - - @Override - public boolean preHandle(HttpServletRequest request, - HttpServletResponse response, Object handler) throws Exception { - //request.setAttribute("argeoUser", securityService.getCurrentUser()); - return super.preHandle(request, response, handler); - } - - public void setSecurityService(UserAdminService securityService) { - this.securityService = securityService; - } - -} diff --git a/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/UsersRolesController.java b/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/UsersRolesController.java deleted file mode 100644 index 185d376a6..000000000 --- a/security/runtime/org.argeo.security.mvc/src/main/java/org/argeo/security/mvc/UsersRolesController.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.security.mvc; - -import org.argeo.server.mvc.MvcConstants; -import org.springframework.stereotype.Controller; - -@Controller -public class UsersRolesController implements MvcConstants { -// private ArgeoSecurityService securityService; -// private Deserializer userDeserializer = null; - - /* USER */ - -// @RequestMapping("/getCredentials.*") -// @ModelAttribute("user") -// public ArgeoUser getCredentials() { -// ArgeoUser argeoUser = securityService.getCurrentUser(); -// if (argeoUser == null) -// return new SimpleArgeoUser(); -// else -// return argeoUser; -// } -// -// @RequestMapping("/getUsersList.*") -// @ModelAttribute("users") -// public Set getUsersList() { -// return securityService.listUsers(); -// } -// -// @RequestMapping("/userExists.*") -// public BooleanAnswer userExists(@RequestParam("username") String username) { -// return new BooleanAnswer(securityService.userExists(username)); -// } -// -// @RequestMapping("/createUser.*") -// @ModelAttribute("user") -// public ArgeoUser createUser(Reader reader) { -// ArgeoUser user = userDeserializer.deserialize(reader, -// SimpleArgeoUser.class); -// securityService.newUser(user); -// return securityService.getUser(user.getUsername()); -// } -// -// @RequestMapping("/updateUser.*") -// @ModelAttribute("user") -// public ArgeoUser updateUser(Reader reader) { -// ArgeoUser user = userDeserializer.deserialize(reader, -// SimpleArgeoUser.class); -// securityService.updateUser(user); -// return securityService.getUser(user.getUsername()); -// } -// -// @RequestMapping("/updateUserSelf.*") -// @ModelAttribute("user") -// /** Will only update the user natures.*/ -// public ArgeoUser updateUserSelf(Reader reader) { -// ArgeoUser user = securityService.getCurrentUser(); -// ArgeoUser userForNatures = userDeserializer.deserialize(reader, -// SimpleArgeoUser.class); -// user.updateUserNatures(userForNatures.getUserNatures()); -// securityService.updateUser(user); -// return securityService.getUser(user.getUsername()); -// } -// -// @RequestMapping("/deleteUser.*") -// public ServerAnswer deleteUser(@RequestParam("username") String username) { -// securityService.deleteUser(username); -// return ServerAnswer.ok("User " + username + " deleted"); -// } -// -// @RequestMapping("/getUserDetails.*") -// @ModelAttribute("user") -// public ArgeoUser getUserDetails(@RequestParam("username") String username) { -// return securityService.getUser(username); -// } - - /* ROLE */ -// @RequestMapping("/getRolesList.*") -// @ModelAttribute("roles") -// public Set getEditableRolesList() { -// return securityService.listEditableRoles(); -// } -// -// @RequestMapping("/createRole.*") -// public ServerAnswer createRole(@RequestParam("role") String role) { -// securityService.newRole(role); -// return ServerAnswer.ok("Role " + role + " created"); -// } -// -// @RequestMapping("/deleteRole.*") -// public ServerAnswer deleteRole(@RequestParam("role") String role) { -// securityService.deleteRole(role); -// return ServerAnswer.ok("Role " + role + " deleted"); -// } -// -// @RequestMapping("/updateUserPassword.*") -// public ServerAnswer updateUserPassword( -// @RequestParam("username") String username, -// @RequestParam("password") String password) { -// securityService.updateUserPassword(username, password); -// return ServerAnswer.ok("Password updated for user " + username); -// } -// -// @RequestMapping("/updatePassword.*") -// public ServerAnswer updatePassword( -// @RequestParam("oldPassword") String oldPassword, -// @RequestParam("password") String password) { -// securityService.updateCurrentUserPassword(oldPassword, password); -// return ServerAnswer.ok("Password updated"); -// } -// -// public void setUserDeserializer(Deserializer userDeserializer) { -// this.userDeserializer = userDeserializer; -// } -// -// public void setSecurityService(ArgeoSecurityService securityService) { -// this.securityService = securityService; -// } - -} diff --git a/security/runtime/pom.xml b/security/runtime/pom.xml index 7b718829a..c2753944d 100644 --- a/security/runtime/pom.xml +++ b/security/runtime/pom.xml @@ -16,7 +16,6 @@ org.argeo.security.ldap org.argeo.security.activemq org.argeo.security.jackrabbit - org.argeo.security.mvc diff --git a/server/dep/org.argeo.server.dep.activemq/pom.xml b/server/dep/org.argeo.server.dep.activemq/pom.xml index 46e2eb9c2..7461ff14c 100644 --- a/server/dep/org.argeo.server.dep.activemq/pom.xml +++ b/server/dep/org.argeo.server.dep.activemq/pom.xml @@ -89,21 +89,5 @@ - - - org.argeo.tp - org.apache.commons.collections - test - - - org.argeo.tp - org.springframework.oxm - test - - - org.argeo.tp - org.springframework.xml - test - \ No newline at end of file diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/jcr-manager-servlet.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/jcr-manager-servlet.xml deleted file mode 100644 index e2879ec30..000000000 --- a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/jcr-manager-servlet.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/web.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/web.xml index 9e0a75280..a017ce992 100644 --- a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/web.xml +++ b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/web.xml @@ -45,22 +45,6 @@ /pub/* - - webdav @@ -86,23 +70,6 @@ /public/* - - springSecurityFilterChain diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/xmlremoting-servlet.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/xmlremoting-servlet.xml deleted file mode 100644 index b6e2ade82..000000000 --- a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/xmlremoting-servlet.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/server/modules/org.argeo.jackrabbit.webapp/pom.xml b/server/modules/org.argeo.jackrabbit.webapp/pom.xml index 2be9e3d1f..201bf0f23 100644 --- a/server/modules/org.argeo.jackrabbit.webapp/pom.xml +++ b/server/modules/org.argeo.jackrabbit.webapp/pom.xml @@ -29,7 +29,6 @@ org.argeo.jackrabbit.remote, org.argeo.jcr, org.argeo.jcr.mvc, - org.argeo.server.mvc, org.springframework.aop, org.springframework.aop.framework, org.springframework.aop.scope, diff --git a/server/runtime/org.argeo.server.core/pom.xml b/server/runtime/org.argeo.server.core/pom.xml index 8e158f110..6d3d914be 100644 --- a/server/runtime/org.argeo.server.core/pom.xml +++ b/server/runtime/org.argeo.server.core/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 org.argeo.commons.server @@ -45,6 +46,12 @@ 1.1.4-SNAPSHOT + + + org.argeo.commons.server + org.argeo.server.jcr + 1.1.4-SNAPSHOT + @@ -78,5 +85,9 @@ slf4j.org.apache.commons.logging + + org.argeo.tp + org.apache.commons.fileupload + \ No newline at end of file diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrBrowserController.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrBrowserController.java new file mode 100644 index 000000000..bed554f38 --- /dev/null +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrBrowserController.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.server.mvc.jcr; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.jcr.Item; +import javax.jcr.NodeIterator; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.Value; +import javax.jcr.query.Query; +import javax.jcr.query.QueryResult; +import javax.jcr.query.Row; +import javax.jcr.query.RowIterator; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.WebRequest; + +@Controller +public class JcrBrowserController implements JcrMvcConstants { + + @RequestMapping("/getJcrItem.*") + public Item getJcrItem(WebRequest webRequest, + @RequestParam("path") String path) throws RepositoryException { + return ((Session) webRequest.getAttribute(REQUEST_ATTR_SESSION, + RequestAttributes.SCOPE_REQUEST)).getItem(path); + } + + @RequestMapping("/queryJcrNodes.*") + public List queryJcrNodes(WebRequest webRequest, + @RequestParam("statement") String statement, + @RequestParam("language") String language) + throws RepositoryException { + Session session = ((Session) webRequest.getAttribute( + REQUEST_ATTR_SESSION, RequestAttributes.SCOPE_REQUEST)); + Query query = session.getWorkspace().getQueryManager().createQuery( + statement, language); + NodeIterator nit = query.execute().getNodes(); + List paths = new ArrayList(); + while (nit.hasNext()) { + paths.add(nit.nextNode().getPath()); + } + return paths; + } + + @RequestMapping("/queryJcrTable.*") + public List> queryJcrTable(WebRequest webRequest, + @RequestParam("statement") String statement, + @RequestParam("language") String language) + throws RepositoryException { + Session session = ((Session) webRequest.getAttribute( + REQUEST_ATTR_SESSION, RequestAttributes.SCOPE_REQUEST)); + Query query = session.getWorkspace().getQueryManager().createQuery( + statement, language); + QueryResult queryResult = query.execute(); + List> results = new ArrayList>(); + results.add(Arrays.asList(queryResult.getColumnNames())); + RowIterator rit = queryResult.getRows(); + + while (rit.hasNext()) { + Row row = rit.nextRow(); + List lst = new ArrayList(); + for (Value value : row.getValues()) { + lst.add(value.getString()); + } + } + return results; + } +} diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrManagerController.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrManagerController.java new file mode 100644 index 000000000..e878378bb --- /dev/null +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrManagerController.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.server.mvc.jcr; + +import java.util.List; +import java.util.StringTokenizer; + +import javax.jcr.Session; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.jcr.JcrResourceAdapter; +import org.argeo.server.ServerAnswer; +import org.argeo.server.mvc.MvcConstants; +import org.springframework.core.io.ByteArrayResource; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.WebRequest; + +@Controller +public class JcrManagerController implements MvcConstants, JcrMvcConstants { + private final static Log log = LogFactory + .getLog(JcrManagerController.class); + + // Create a factory for disk-based file items + private FileItemFactory factory = new DiskFileItemFactory(); + + // Create a new file upload handler + private ServletFileUpload upload = new ServletFileUpload(factory); + + @SuppressWarnings("unchecked") + @RequestMapping("/upload/**") + @ModelAttribute(ANSWER_MODEL_KEY_AS_HTML) + public ServerAnswer upload(WebRequest webRequest, + HttpServletRequest request, HttpServletResponse response) + throws Exception { + + Session session = ((Session) webRequest.getAttribute( + REQUEST_ATTR_SESSION, RequestAttributes.SCOPE_REQUEST)); + JcrResourceAdapter resourceAdapter = new JcrResourceAdapter(session); + // Parse the request + List items = upload.parseRequest(request); + + byte[] arr = null; + for (FileItem item : items) { + if (!item.isFormField()) { + arr = item.get(); + break; + } + } + + ByteArrayResource res = new ByteArrayResource(arr); + // String pathInfo = request.getPathInfo(); + + StringBuffer path = new StringBuffer("/"); + StringTokenizer st = new StringTokenizer(request.getPathInfo(), "/"); + st.nextToken();// skip /upload/ + while (st.hasMoreTokens()) { + String token = st.nextToken(); + if (!st.hasMoreTokens()) { + resourceAdapter.mkdirs(path.toString()); + path.append(token); + } else { + path.append(token).append('/'); + } + } + // String path = '/' + pathInfo.substring(1).substring( + // pathInfo.indexOf('/')); + if (log.isDebugEnabled()) + log.debug("Upload to " + path); + resourceAdapter.update(path.toString(), res.getInputStream()); + return ServerAnswer.ok("File " + path + " imported"); + } + +} diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrMvcConstants.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrMvcConstants.java new file mode 100644 index 000000000..eec12bda7 --- /dev/null +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrMvcConstants.java @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.server.mvc.jcr; + +public interface JcrMvcConstants { + public final static String REQUEST_ATTR_SESSION = "jcrSession"; +} diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrXmlServerSerializer.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrXmlServerSerializer.java new file mode 100644 index 000000000..467b4d352 --- /dev/null +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/JcrXmlServerSerializer.java @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.server.mvc.jcr; + +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.RepositoryException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.argeo.ArgeoException; +import org.argeo.server.ServerSerializer; +import org.springframework.xml.dom.DomContentHandler; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** @deprecated */ +public class JcrXmlServerSerializer implements ServerSerializer { + private String contentTypeCharset = "UTF-8"; + + private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory + .newInstance(); + private final TransformerFactory transformerFactory = TransformerFactory + .newInstance(); + + public void serialize(Object obj, HttpServletRequest request, + HttpServletResponse response) { + if (!(obj instanceof Node)) + throw new ArgeoException("Only " + Node.class + " is supported"); + + String noRecurseStr = request.getParameter("noRecurse"); + boolean noRecurse = noRecurseStr != null && noRecurseStr.equals("true"); + + String depthStr = request.getParameter("depth"); + String downloadStr = request.getParameter("download"); + + Node node = (Node) obj; + + try { + String contentType = "text/xml;charset=" + contentTypeCharset; + // download case + if (downloadStr != null && downloadStr.equals("true")) { + String fileName = node.getName().replace(':', '_') + ".xml"; + contentType = contentType + ";name=\"" + fileName + "\""; + response.setHeader("Content-Disposition", + "attachment; filename=\"" + fileName + "\""); + response.setHeader("Expires", "0"); + response + .setHeader("Cache-Control", "no-cache, must-revalidate"); + response.setHeader("Pragma", "no-cache"); + } + + response.setContentType(contentType); + if (depthStr == null) { + node.getSession().exportDocumentView(node.getPath(), + response.getOutputStream(), true, noRecurse); + } else { + int depth = Integer.parseInt(depthStr); + Document document = documentBuilderFactory.newDocumentBuilder() + .newDocument(); + serializeLevelToDom(node, document, 0, depth); + Transformer transformer = transformerFactory.newTransformer(); + transformer.transform(new DOMSource(document), + new StreamResult(response.getOutputStream())); + } + } catch (Exception e) { + throw new ArgeoException("Cannot serialize " + node, e); + } + } + + protected void serializeLevelToDom(Node currentJcrNode, + org.w3c.dom.Node currentDomNode, int currentDepth, int targetDepth) + throws RepositoryException, SAXException { + DomContentHandler domContentHandler = new DomContentHandler( + currentDomNode); + currentJcrNode.getSession().exportDocumentView( + currentJcrNode.getPath(), domContentHandler, true, true); + + if (currentDepth == targetDepth) + return; + + // TODO: filter + NodeIterator nit = currentJcrNode.getNodes(); + while (nit.hasNext()) { + Node nextJcrNode = nit.nextNode(); + org.w3c.dom.Node nextDomNode; + if (currentDomNode instanceof Document) + nextDomNode = ((Document) currentDomNode).getDocumentElement(); + else { + String name = currentJcrNode.getName(); + NodeList nodeList = ((Element) currentDomNode) + .getElementsByTagName(name); + if (nodeList.getLength() < 1) + throw new ArgeoException("No elment named " + name + + " under " + currentDomNode); + // we know it is the last one added + nextDomNode = nodeList.item(nodeList.getLength() - 1); + } + // recursive call + serializeLevelToDom(nextJcrNode, nextDomNode, currentDepth + 1, + targetDepth); + } + } + + public void setContentTypeCharset(String contentTypeCharset) { + this.contentTypeCharset = contentTypeCharset; + } + +} diff --git a/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/OpenSessionInViewJcrInterceptor.java b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/OpenSessionInViewJcrInterceptor.java new file mode 100644 index 000000000..77d2663d0 --- /dev/null +++ b/server/runtime/org.argeo.server.core/src/main/java/org/argeo/server/mvc/jcr/OpenSessionInViewJcrInterceptor.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.server.mvc.jcr; + +import javax.jcr.Session; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.ui.ModelMap; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.context.request.WebRequestInterceptor; + +/** @deprecated */ +public class OpenSessionInViewJcrInterceptor implements WebRequestInterceptor, + JcrMvcConstants { + private final static Log log = LogFactory + .getLog(OpenSessionInViewJcrInterceptor.class); + + private Session session; + + public void preHandle(WebRequest request) throws Exception { + if (log.isTraceEnabled()) + log.trace("preHandle: " + request); + // Authentication auth = SecurityContextHolder.getContext() + // .getAuthentication(); + // if (auth != null) + // log.debug("auth=" + auth + ", authenticated=" + // + auth.isAuthenticated() + ", name=" + auth.getName()); + // else + // log.debug("No auth"); + + // FIXME: find a safer way to initialize + // FIXME: not really needed to initialize here + // session.getRepository(); + request.setAttribute(REQUEST_ATTR_SESSION, session, + RequestAttributes.SCOPE_REQUEST); + } + + public void postHandle(WebRequest request, ModelMap model) throws Exception { + // if (log.isDebugEnabled()) + // log.debug("postHandle: " + request); + } + + public void afterCompletion(WebRequest request, Exception ex) + throws Exception { + if (log.isTraceEnabled()) + log.trace("afterCompletion: " + request); + // FIXME: only close session that were open + session.logout(); + } + + public void setSession(Session session) { + this.session = session; + } + +} diff --git a/server/runtime/org.argeo.server.jackrabbit/pom.xml b/server/runtime/org.argeo.server.jackrabbit/pom.xml index 98dfaa29f..1b57143d7 100644 --- a/server/runtime/org.argeo.server.jackrabbit/pom.xml +++ b/server/runtime/org.argeo.server.jackrabbit/pom.xml @@ -50,16 +50,6 @@ org.argeo.util 1.1.4-SNAPSHOT - - org.argeo.commons.server - org.argeo.server.core - 1.1.4-SNAPSHOT - - - org.argeo.commons.security - org.argeo.security.core - 1.1.4-SNAPSHOT - org.argeo.commons.server org.argeo.server.jcr.mvc @@ -90,10 +80,6 @@ org.argeo.tp org.springframework.web.servlet - - org.argeo.tp - org.springframework.xml - diff --git a/server/runtime/org.argeo.server.jcr.mvc/pom.xml b/server/runtime/org.argeo.server.jcr.mvc/pom.xml index 3779a77ef..fbdb96add 100644 --- a/server/runtime/org.argeo.server.jcr.mvc/pom.xml +++ b/server/runtime/org.argeo.server.jcr.mvc/pom.xml @@ -1,4 +1,6 @@ - + + 4.0.0 org.argeo.commons.server @@ -32,6 +34,7 @@ org.argeo.jcr.mvc.* + org.springframework.core, org.springframework.beans.factory, javax.xml.transform.*;version="0.0.0", javax.xml.parsers.*;version="0.0.0", @@ -51,31 +54,26 @@ 1.1.4-SNAPSHOT + - org.argeo.commons.server - org.argeo.server.core - 1.1.4-SNAPSHOT + org.argeo.tp + org.springframework.context - org.argeo.tp - org.apache.commons.io + org.springframework.core - - org.argeo.tp - org.springframework.web.servlet + org.springframework.beans - org.argeo.tp - org.springframework.security.core + org.springframework.web - org.argeo.tp - org.springframework.xml + org.springframework.web.servlet @@ -83,10 +81,5 @@ org.argeo.tp slf4j.org.apache.commons.logging - - - org.argeo.tp - org.apache.commons.fileupload - \ No newline at end of file diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrBrowserController.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrBrowserController.java deleted file mode 100644 index c65554336..000000000 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrBrowserController.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.jcr.mvc; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.jcr.Item; -import javax.jcr.NodeIterator; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.Value; -import javax.jcr.query.Query; -import javax.jcr.query.QueryResult; -import javax.jcr.query.Row; -import javax.jcr.query.RowIterator; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.WebRequest; - -@Controller -public class JcrBrowserController implements JcrMvcConstants { - - @RequestMapping("/getJcrItem.*") - public Item getJcrItem(WebRequest webRequest, - @RequestParam("path") String path) throws RepositoryException { - return ((Session) webRequest.getAttribute(REQUEST_ATTR_SESSION, - RequestAttributes.SCOPE_REQUEST)).getItem(path); - } - - @RequestMapping("/queryJcrNodes.*") - public List queryJcrNodes(WebRequest webRequest, - @RequestParam("statement") String statement, - @RequestParam("language") String language) - throws RepositoryException { - Session session = ((Session) webRequest.getAttribute( - REQUEST_ATTR_SESSION, RequestAttributes.SCOPE_REQUEST)); - Query query = session.getWorkspace().getQueryManager().createQuery( - statement, language); - NodeIterator nit = query.execute().getNodes(); - List paths = new ArrayList(); - while (nit.hasNext()) { - paths.add(nit.nextNode().getPath()); - } - return paths; - } - - @RequestMapping("/queryJcrTable.*") - public List> queryJcrTable(WebRequest webRequest, - @RequestParam("statement") String statement, - @RequestParam("language") String language) - throws RepositoryException { - Session session = ((Session) webRequest.getAttribute( - REQUEST_ATTR_SESSION, RequestAttributes.SCOPE_REQUEST)); - Query query = session.getWorkspace().getQueryManager().createQuery( - statement, language); - QueryResult queryResult = query.execute(); - List> results = new ArrayList>(); - results.add(Arrays.asList(queryResult.getColumnNames())); - RowIterator rit = queryResult.getRows(); - - while (rit.hasNext()) { - Row row = rit.nextRow(); - List lst = new ArrayList(); - for (Value value : row.getValues()) { - lst.add(value.getString()); - } - } - return results; - } -} diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrManagerController.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrManagerController.java deleted file mode 100644 index 67a99ae80..000000000 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrManagerController.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.jcr.mvc; - -import java.util.List; -import java.util.StringTokenizer; - -import javax.jcr.Session; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.argeo.jcr.JcrResourceAdapter; -import org.argeo.server.ServerAnswer; -import org.argeo.server.mvc.MvcConstants; -import org.springframework.core.io.ByteArrayResource; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.WebRequest; - -@Controller -public class JcrManagerController implements MvcConstants, JcrMvcConstants { - private final static Log log = LogFactory - .getLog(JcrManagerController.class); - - // Create a factory for disk-based file items - private FileItemFactory factory = new DiskFileItemFactory(); - - // Create a new file upload handler - private ServletFileUpload upload = new ServletFileUpload(factory); - - @SuppressWarnings("unchecked") - @RequestMapping("/upload/**") - @ModelAttribute(ANSWER_MODEL_KEY_AS_HTML) - public ServerAnswer upload(WebRequest webRequest, - HttpServletRequest request, HttpServletResponse response) - throws Exception { - - Session session = ((Session) webRequest.getAttribute( - REQUEST_ATTR_SESSION, RequestAttributes.SCOPE_REQUEST)); - JcrResourceAdapter resourceAdapter = new JcrResourceAdapter(session); - // Parse the request - List items = upload.parseRequest(request); - - byte[] arr = null; - for (FileItem item : items) { - if (!item.isFormField()) { - arr = item.get(); - break; - } - } - - ByteArrayResource res = new ByteArrayResource(arr); - // String pathInfo = request.getPathInfo(); - - StringBuffer path = new StringBuffer("/"); - StringTokenizer st = new StringTokenizer(request.getPathInfo(), "/"); - st.nextToken();// skip /upload/ - while (st.hasMoreTokens()) { - String token = st.nextToken(); - if (!st.hasMoreTokens()) { - resourceAdapter.mkdirs(path.toString()); - path.append(token); - } else { - path.append(token).append('/'); - } - } - // String path = '/' + pathInfo.substring(1).substring( - // pathInfo.indexOf('/')); - if (log.isDebugEnabled()) - log.debug("Upload to " + path); - resourceAdapter.update(path.toString(), res.getInputStream()); - return ServerAnswer.ok("File " + path + " imported"); - } - -} diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrMvcConstants.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrMvcConstants.java deleted file mode 100644 index d1f9888bc..000000000 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrMvcConstants.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.jcr.mvc; - -public interface JcrMvcConstants { - public final static String REQUEST_ATTR_SESSION = "jcrSession"; -} diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrXmlServerSerializer.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrXmlServerSerializer.java deleted file mode 100644 index 615a32214..000000000 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/JcrXmlServerSerializer.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.jcr.mvc; - -import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.RepositoryException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.argeo.ArgeoException; -import org.argeo.server.ServerSerializer; -import org.springframework.xml.dom.DomContentHandler; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -/** @deprecated */ -public class JcrXmlServerSerializer implements ServerSerializer { - private String contentTypeCharset = "UTF-8"; - - private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory - .newInstance(); - private final TransformerFactory transformerFactory = TransformerFactory - .newInstance(); - - public void serialize(Object obj, HttpServletRequest request, - HttpServletResponse response) { - if (!(obj instanceof Node)) - throw new ArgeoException("Only " + Node.class + " is supported"); - - String noRecurseStr = request.getParameter("noRecurse"); - boolean noRecurse = noRecurseStr != null && noRecurseStr.equals("true"); - - String depthStr = request.getParameter("depth"); - String downloadStr = request.getParameter("download"); - - Node node = (Node) obj; - - try { - String contentType = "text/xml;charset=" + contentTypeCharset; - // download case - if (downloadStr != null && downloadStr.equals("true")) { - String fileName = node.getName().replace(':', '_') + ".xml"; - contentType = contentType + ";name=\"" + fileName + "\""; - response.setHeader("Content-Disposition", - "attachment; filename=\"" + fileName + "\""); - response.setHeader("Expires", "0"); - response - .setHeader("Cache-Control", "no-cache, must-revalidate"); - response.setHeader("Pragma", "no-cache"); - } - - response.setContentType(contentType); - if (depthStr == null) { - node.getSession().exportDocumentView(node.getPath(), - response.getOutputStream(), true, noRecurse); - } else { - int depth = Integer.parseInt(depthStr); - Document document = documentBuilderFactory.newDocumentBuilder() - .newDocument(); - serializeLevelToDom(node, document, 0, depth); - Transformer transformer = transformerFactory.newTransformer(); - transformer.transform(new DOMSource(document), - new StreamResult(response.getOutputStream())); - } - } catch (Exception e) { - throw new ArgeoException("Cannot serialize " + node, e); - } - } - - protected void serializeLevelToDom(Node currentJcrNode, - org.w3c.dom.Node currentDomNode, int currentDepth, int targetDepth) - throws RepositoryException, SAXException { - DomContentHandler domContentHandler = new DomContentHandler( - currentDomNode); - currentJcrNode.getSession().exportDocumentView( - currentJcrNode.getPath(), domContentHandler, true, true); - - if (currentDepth == targetDepth) - return; - - // TODO: filter - NodeIterator nit = currentJcrNode.getNodes(); - while (nit.hasNext()) { - Node nextJcrNode = nit.nextNode(); - org.w3c.dom.Node nextDomNode; - if (currentDomNode instanceof Document) - nextDomNode = ((Document) currentDomNode).getDocumentElement(); - else { - String name = currentJcrNode.getName(); - NodeList nodeList = ((Element) currentDomNode) - .getElementsByTagName(name); - if (nodeList.getLength() < 1) - throw new ArgeoException("No elment named " + name - + " under " + currentDomNode); - // we know it is the last one added - nextDomNode = nodeList.item(nodeList.getLength() - 1); - } - // recursive call - serializeLevelToDom(nextJcrNode, nextDomNode, currentDepth + 1, - targetDepth); - } - } - - public void setContentTypeCharset(String contentTypeCharset) { - this.contentTypeCharset = contentTypeCharset; - } - -} diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java index ab7963669..4f0649b2f 100644 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java +++ b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java @@ -39,6 +39,7 @@ import org.springframework.web.context.ServletContextAware; import org.springframework.web.servlet.HandlerExecutionChain; import org.springframework.web.servlet.HandlerMapping; +/** Handles multiple JCR servers with a single servlet. */ public abstract class MultipleRepositoryHandlerMapping implements HandlerMapping, ApplicationContextAware, ServletContextAware { private final static Log log = LogFactory diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/OpenSessionInViewJcrInterceptor.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/OpenSessionInViewJcrInterceptor.java deleted file mode 100644 index 7419904a8..000000000 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/OpenSessionInViewJcrInterceptor.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2007-2012 Mathieu Baudier - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.argeo.jcr.mvc; - -import javax.jcr.Session; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.ui.ModelMap; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.context.request.WebRequest; -import org.springframework.web.context.request.WebRequestInterceptor; - -/** @deprecated */ -public class OpenSessionInViewJcrInterceptor implements WebRequestInterceptor, - JcrMvcConstants { - private final static Log log = LogFactory - .getLog(OpenSessionInViewJcrInterceptor.class); - - private Session session; - - public void preHandle(WebRequest request) throws Exception { - if (log.isTraceEnabled()) - log.trace("preHandle: " + request); - // Authentication auth = SecurityContextHolder.getContext() - // .getAuthentication(); - // if (auth != null) - // log.debug("auth=" + auth + ", authenticated=" - // + auth.isAuthenticated() + ", name=" + auth.getName()); - // else - // log.debug("No auth"); - - // FIXME: find a safer way to initialize - // FIXME: not really needed to initialize here - // session.getRepository(); - request.setAttribute(REQUEST_ATTR_SESSION, session, - RequestAttributes.SCOPE_REQUEST); - } - - public void postHandle(WebRequest request, ModelMap model) throws Exception { - // if (log.isDebugEnabled()) - // log.debug("postHandle: " + request); - } - - public void afterCompletion(WebRequest request, Exception ex) - throws Exception { - if (log.isTraceEnabled()) - log.trace("afterCompletion: " + request); - // FIXME: only close session that were open - session.logout(); - } - - public void setSession(Session session) { - this.session = session; - } - -} diff --git a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/ResourceProxyServlet.java b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/ResourceProxyServlet.java index 4a8683129..c2e56379e 100644 --- a/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/ResourceProxyServlet.java +++ b/server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/ResourceProxyServlet.java @@ -33,12 +33,11 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; -import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.proxy.ResourceProxy; /** Wraps a proxy via HTTP */ -public class ResourceProxyServlet extends HttpServlet implements ArgeoNames { +public class ResourceProxyServlet extends HttpServlet { private static final long serialVersionUID = -8886549549223155801L; private final static Log log = LogFactory