You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by so...@apache.org on 2008/09/10 02:30:22 UTC
svn commit: r693670 [2/6] - in /lenya/branches/revolution/1.3.x: ./
src/java/org/apache/lenya/cms/ac/ src/java/org/apache/lenya/cms/ac/usecase/
src/java/org/apache/lenya/cms/ac/workflow/
src/java/org/apache/lenya/cms/ant/ src/java/org/apache/lenya/cms/...
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/PublicationAccessControllerResolver.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/PublicationAccessControllerResolver.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/PublicationAccessControllerResolver.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/PublicationAccessControllerResolver.java Tue Sep 9 17:30:20 2008
@@ -16,7 +16,6 @@
*/
/* $Id$ */
package org.apache.lenya.cms.ac;
-
import java.io.File;
import org.apache.avalon.framework.activity.Initializable;
import org.apache.avalon.framework.configuration.Configurable;
@@ -29,139 +28,128 @@
import org.apache.lenya.ac.AccessController;
import org.apache.lenya.ac.impl.AbstractAccessControllerResolver;
import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.cms.publication.PublicationFactory;
import org.apache.lenya.cms.publication.URLInformation;
-
+import org.apache.lenya.util.Globals;
/**
- * Resolves the access controller according to the <code>ac.xconf</code> file
- * of a publication.
+ * Resolves the access controller according to the <code>ac.xconf</code> file of a publication.
*/
public class PublicationAccessControllerResolver extends AbstractAccessControllerResolver implements Initializable {
- protected static final String CONFIGURATION_FILE = "config/ac/ac.xconf".replace('/', File.separatorChar);
- protected static final String TYPE_ATTRIBUTE = "type";
- /**
- * This implementation uses the publication ID in combination with the
- * context path as cache key.
- *
- * @see org.apache.lenya.ac.impl.AbstractAccessControllerResolver#generateCacheKey(java.lang.String,
- * org.apache.excalibur.source.SourceResolver)
- */
- protected Object generateCacheKey(String webappUrl, SourceResolver resolver) throws AccessControlException {
- URLInformation info = new URLInformation(webappUrl);
- String publicationId = info.getPublicationId();
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Using first URL step (might be publication ID) as cache key: [" + publicationId + "]");
- }
- return super.generateCacheKey(publicationId, resolver);
- }
- /**
- * @see org.apache.lenya.ac.impl.AbstractAccessControllerResolver#doResolveAccessController(java.lang.String)
- */
- public AccessController doResolveAccessController(String webappUrl) throws AccessControlException {
- getLogger().debug("Resolving controller for URL [" + webappUrl + "]");
- AccessController controller = null;
- Publication publication = getPublication(webappUrl);
- if (publication != null) {
- String publicationUrl = webappUrl.substring(("/" + publication.getId()).length());
- controller = resolveAccessController(publication, publicationUrl);
- }
- return controller;
- }
- /**
- * Returns the publication for the webapp URL or null if the URL is not
- * included in a publication.
- *
- * @param webappUrl
- * The webapp URL.
- * @return A publication.
- * @throws AccessControlException
- * when something went wrong.
- */
- protected Publication getPublication(String webappUrl) throws AccessControlException {
- Publication publication = null;
- // assert webappUrl.startsWith("/");
- // remove leading slash
- String url = webappUrl.substring(1);
- if (url.length() > 0) {
- URLInformation info = new URLInformation(webappUrl);
- String publicationId = info.getPublicationId();
- File contextDir = getContext();
- if (PublicationFactory.existsPublication(publicationId, contextDir.getAbsolutePath())) {
- getLogger().debug("Publication [" + publicationId + "] exists.");
- try {
- publication = PublicationFactory.getPublication(publicationId, contextDir.getAbsolutePath());
- } catch (PublicationException e) {
- throw new AccessControlException(e);
- }
- } else {
- getLogger().debug("Publication [" + publicationId + "] does not exist.");
+ protected static final String CONFIGURATION_FILE = "config/ac/ac.xconf".replace('/', File.separatorChar);
+ protected static final String TYPE_ATTRIBUTE = "type";
+ /**
+ * This implementation uses the publication ID in combination with the context path as cache key.
+ *
+ * @see org.apache.lenya.ac.impl.AbstractAccessControllerResolver#generateCacheKey(java.lang.String, org.apache.excalibur.source.SourceResolver)
+ */
+ protected Object generateCacheKey(String webappUrl, SourceResolver resolver) throws AccessControlException {
+ URLInformation info = new URLInformation(webappUrl);
+ String publicationId = info.getPublicationId();
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Using first URL step (might be publication ID) as cache key: [" + publicationId + "]");
+ }
+ return super.generateCacheKey(publicationId, resolver);
+ }
+ /**
+ * @see org.apache.lenya.ac.impl.AbstractAccessControllerResolver#doResolveAccessController(java.lang.String)
+ */
+ public AccessController doResolveAccessController(String webappUrl) throws AccessControlException {
+ getLogger().debug("Resolving controller for URL [" + webappUrl + "]");
+ AccessController controller = null;
+ Publication publication = getPublication(webappUrl);
+ if(publication != null){
+ String publicationUrl = webappUrl.substring(("/" + publication.getId()).length());
+ controller = resolveAccessController(publication, publicationUrl);
+ }
+ return controller;
+ }
+ /**
+ * Returns the publication for the webapp URL or null if the URL is not included in a publication.
+ *
+ * @param webappUrl
+ * The webapp URL.
+ * @return A publication.
+ * @throws AccessControlException
+ * when something went wrong.
+ */
+ protected Publication getPublication(String webappUrl) throws AccessControlException {
+ Publication publication = null;
+ // assert webappUrl.startsWith("/");
+ // remove leading slash
+ String url = webappUrl.substring(1);
+ if(url.length() > 0){
+ URLInformation info = new URLInformation(webappUrl);
+ String publicationId = info.getPublicationId();
+ if(Globals.existsPublication(publicationId)){
+ getLogger().debug("Publication [" + publicationId + "] exists.");
+ publication = Globals.getPublication(publicationId);
+ }else{
+ getLogger().debug("Publication [" + publicationId + "] does not exist.");
+ }
+ }
+ return publication;
+ }
+ /**
+ * Returns the servlet context.
+ *
+ * @return A file.
+ * @throws AccessControlException
+ * when something went wrong.
+ */
+ protected File getContext() throws AccessControlException {
+ return context;
+ }
+ private File context;
+ /**
+ * Resolves an access controller for a certain URL within a publication.
+ *
+ * @param publication
+ * The publication.
+ * @param url
+ * The url within the publication.
+ * @return An access controller.
+ * @throws AccessControlException
+ * when something went wrong.
+ */
+ public AccessController resolveAccessController(Publication publication, String url) throws AccessControlException {
+ // assert publication != null;
+ AccessController accessController = null;
+ File configurationFile = new File(publication.getDirectory(), CONFIGURATION_FILE);
+ if(configurationFile.isFile()){
+ try{
+ Configuration configuration = new DefaultConfigurationBuilder().buildFromFile(configurationFile);
+ String type = configuration.getAttribute(TYPE_ATTRIBUTE);
+ accessController = (AccessController) getManager().lookup(AccessController.ROLE + "/" + type);
+ if(accessController instanceof Configurable){
+ ((Configurable) accessController).configure(configuration);
}
- }
- return publication;
- }
- /**
- * Returns the servlet context.
- *
- * @return A file.
- * @throws AccessControlException
- * when something went wrong.
- */
- protected File getContext() throws AccessControlException {
- return context;
- }
- private File context;
- /**
- * Resolves an access controller for a certain URL within a publication.
- *
- * @param publication
- * The publication.
- * @param url
- * The url within the publication.
- * @return An access controller.
- * @throws AccessControlException
- * when something went wrong.
- */
- public AccessController resolveAccessController(Publication publication, String url) throws AccessControlException {
- // assert publication != null;
- AccessController accessController = null;
- File configurationFile = new File(publication.getDirectory(), CONFIGURATION_FILE);
- if (configurationFile.isFile()) {
- try {
- Configuration configuration = new DefaultConfigurationBuilder().buildFromFile(configurationFile);
- String type = configuration.getAttribute(TYPE_ATTRIBUTE);
- accessController = (AccessController) getManager().lookup(AccessController.ROLE + "/" + type);
- if (accessController instanceof Configurable) {
- ((Configurable) accessController).configure(configuration);
- }
- } catch (Exception e) {
- throw new AccessControlException(e);
+ }catch(Exception e){
+ throw new AccessControlException(e);
+ }
+ }
+ return accessController;
+ }
+ /**
+ * @see org.apache.avalon.framework.activity.Initializable#initialize()
+ */
+ public void initialize() throws Exception {
+ SourceResolver resolver = null;
+ Source contextSource = null;
+ File contextDir;
+ try{
+ resolver = (SourceResolver) getManager().lookup(SourceResolver.ROLE);
+ contextSource = resolver.resolveURI("context:///");
+ contextDir = SourceUtil.getFile(contextSource);
+ if(contextDir == null || !contextDir.isDirectory()){
+ throw new AccessControlException("The servlet context is not a directory!");
+ }
+ }finally{
+ if(resolver != null){
+ if(contextSource != null){
+ resolver.release(contextSource);
}
- }
- return accessController;
- }
- /**
- * @see org.apache.avalon.framework.activity.Initializable#initialize()
- */
- public void initialize() throws Exception {
- SourceResolver resolver = null;
- Source contextSource = null;
- File contextDir;
- try {
- resolver = (SourceResolver) getManager().lookup(SourceResolver.ROLE);
- contextSource = resolver.resolveURI("context:///");
- contextDir = SourceUtil.getFile(contextSource);
- if (contextDir == null || !contextDir.isDirectory()) {
- throw new AccessControlException("The servlet context is not a directory!");
- }
- } finally {
- if (resolver != null) {
- if (contextSource != null) {
- resolver.release(contextSource);
- }
- getManager().release(resolver);
- }
- }
- this.context = contextDir;
- }
+ getManager().release(resolver);
+ }
+ }
+ this.context = contextDir;
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/usecase/UsecaseAuthorizer.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/usecase/UsecaseAuthorizer.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/usecase/UsecaseAuthorizer.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/usecase/UsecaseAuthorizer.java Tue Sep 9 17:30:20 2008
@@ -14,9 +14,7 @@
* limitations under the License.
*
*/
-
package org.apache.lenya.cms.ac.usecase;
-
import java.util.Arrays;
import java.util.List;
import org.apache.avalon.framework.activity.Disposable;
@@ -36,181 +34,160 @@
import org.apache.lenya.ac.cache.SourceCache;
import org.apache.lenya.ac.impl.PolicyAuthorizer;
import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationFactory;
-
+import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.util.Globals;
/**
* Authorizer for usecases.
+ *
* @version $Id$
*/
-public class UsecaseAuthorizer
- extends AbstractLogEnabled
- implements Authorizer, Serviceable, Disposable, Parameterizable {
-
- public static final String TYPE = "usecase";
- public static final String USECASE_PARAMETER = "lenya.usecase";
-
- private SourceCache cache;
- private String configurationUri;
-
- /**
- * Returns the configuration source cache.
- *
- * @return A source cache.
- */
- public SourceCache getCache() {
- return cache;
- }
-
- /**
- * Returns the source URI of the usecase role configuration file for a certain publication.
- *
- * @param publication The publication.
- * @return A string representing a URI.
- */
- protected String getConfigurationURI(Publication publication) {
- return "context:///"
- + Publication.PUBLICATION_PREFIX_URI
- + "/"
- + publication.getId()
- + CONFIGURATION_FILE;
- }
-
- /**
- * @see org.apache.lenya.ac.Authorizer#authorize(org.apache.cocoon.environment.Request)
- */
- public boolean authorize(Request request) throws AccessControlException {
-
- String usecase = request.getParameter(USECASE_PARAMETER);
- boolean authorized = true;
-
- SourceResolver resolver = null;
- try {
- resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
- if (usecase != null) {
-
- String configurationUri;
- if (getConfigurationURI() != null) {
- configurationUri = getConfigurationURI();
- } else {
- Publication publication = PublicationFactory.getPublication(resolver, request);
- configurationUri = getConfigurationURI(publication);
- }
-
- Role[] roles = PolicyAuthorizer.getRoles(request);
- authorized = authorizeUsecase(usecase, roles, configurationUri);
- } else {
- getLogger().debug("No usecase to authorize. Granting access.");
+public class UsecaseAuthorizer extends AbstractLogEnabled implements Authorizer, Serviceable, Disposable, Parameterizable {
+ public static final String TYPE = "usecase";
+ public static final String USECASE_PARAMETER = "lenya.usecase";
+ private SourceCache cache;
+ private String configurationUri;
+ /**
+ * Returns the configuration source cache.
+ *
+ * @return A source cache.
+ */
+ public SourceCache getCache() {
+ return cache;
+ }
+ /**
+ * Returns the source URI of the usecase role configuration file for a certain publication.
+ *
+ * @param publication
+ * The publication.
+ * @return A string representing a URI.
+ */
+ protected String getConfigurationURI(Publication publication) {
+ return "context:///" + Publication.PUBLICATION_PREFIX_URI + "/" + publication.getId() + CONFIGURATION_FILE;
+ }
+ /**
+ * @see org.apache.lenya.ac.Authorizer#authorize(org.apache.cocoon.environment.Request)
+ */
+ public boolean authorize(Request request) throws AccessControlException {
+ String usecase = request.getParameter(USECASE_PARAMETER);
+ boolean authorized = true;
+ SourceResolver resolver = null;
+ try{
+ resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
+ if(usecase != null){
+ String configurationUri;
+ if(getConfigurationURI() != null){
+ configurationUri = getConfigurationURI();
+ }else{
+ Publication publication = Globals.getPublication();
+ if(null == publication){
+ throw new PublicationException("UsecaseAuthorizer.authorize: No Publication.");
+ }
+ configurationUri = getConfigurationURI(publication);
}
- } catch (Exception e) {
- throw new AccessControlException(e);
- } finally {
- if (resolver != null) {
- manager.release(resolver);
- }
- }
-
- return authorized;
- }
-
- /**
- * Authorizes a usecase.
- *
- * @param usecase The usecase ID.
- * @param roles The roles of the current identity.
- * @param configurationUri The URI to retrieve the policy configuration from.
- * @return A boolean value.
- * @throws AccessControlException when something went wrong.
- */
- public boolean authorizeUsecase(String usecase, Role[] roles, String configurationUri)
- throws AccessControlException {
- getLogger().debug("Authorizing usecase [" + usecase + "]");
- boolean authorized = true;
-
- UsecaseRolesBuilder builder = new UsecaseRolesBuilder();
- UsecaseRoles usecaseRoles;
- try {
- usecaseRoles = (UsecaseRoles) getCache().get(configurationUri, builder);
- } catch (CachingException e) {
- throw new AccessControlException(e);
- }
-
- if (usecaseRoles == null) {
- throw new AccessControlException("Usecase policies configuration not found at [" + configurationUri + "]");
- }
-
- if (usecaseRoles.hasRoles(usecase)) {
-
- getLogger().debug("Roles for usecase found.");
-
- List usecaseRoleIds = Arrays.asList(usecaseRoles.getRoles(usecase));
-
- int i = 0;
- authorized = false;
- while (!authorized && i < roles.length) {
- authorized = usecaseRoleIds.contains(roles[i].getId());
- getLogger().debug(
- "Authorization for role [" + roles[i].getId() + "] is [" + authorized + "]");
- i++;
- }
- } else {
- getLogger().debug("No roles for usecase found. Granting access.");
- }
- return authorized;
- }
-
- private ServiceManager manager;
-
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
- */
- public void service(ServiceManager manager) throws ServiceException {
- getLogger().debug("Servicing [" + getClass().getName() + "]");
- this.manager = manager;
- this.cache = (SourceCache) manager.lookup(SourceCache.ROLE);
- }
-
- /**
- * @see org.apache.avalon.framework.activity.Disposable#dispose()
- */
- public void dispose() {
- if (getCache() != null) {
- manager.release(getCache());
- }
- }
-
- public static final String CONFIGURATION_FILE = "/config/ac/usecase-policies.xml";
- public static final String PARAMETER_CONFIGURATION = "configuration";
-
- /**
- * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
- */
- public void parameterize(Parameters parameters) throws ParameterException {
- if (parameters.isParameter(PARAMETER_CONFIGURATION)) {
- this.configurationUri = parameters.getParameter(PARAMETER_CONFIGURATION);
- }
- }
-
- /**
- * Returns the configuration URL.
- *
- * @return The configuration URL.
- */
- public String getConfigurationURI() {
- return configurationUri;
- }
-
- /**
- * Authorizes a usecase.
- *
- * @param usecase The usecase to authorize.
- * @param roles The roles of the identity.
- * @param publication The publication.
- * @return A boolean value.
- * @throws AccessControlException when something went wrong.
- */
- public boolean authorizeUsecase(String usecase, Role[] roles, Publication publication)
- throws AccessControlException {
- return authorizeUsecase(usecase, roles, getConfigurationURI(publication));
- }
-
+ Role[] roles = PolicyAuthorizer.getRoles(request);
+ authorized = authorizeUsecase(usecase, roles, configurationUri);
+ }else{
+ getLogger().debug("No usecase to authorize. Granting access.");
+ }
+ }catch(Exception e){
+ throw new AccessControlException(e);
+ }finally{
+ if(resolver != null){
+ manager.release(resolver);
+ }
+ }
+ return authorized;
+ }
+ /**
+ * Authorizes a usecase.
+ *
+ * @param usecase
+ * The usecase ID.
+ * @param roles
+ * The roles of the current identity.
+ * @param configurationUri
+ * The URI to retrieve the policy configuration from.
+ * @return A boolean value.
+ * @throws AccessControlException
+ * when something went wrong.
+ */
+ public boolean authorizeUsecase(String usecase, Role[] roles, String configurationUri) throws AccessControlException {
+ getLogger().debug("Authorizing usecase [" + usecase + "]");
+ boolean authorized = true;
+ UsecaseRolesBuilder builder = new UsecaseRolesBuilder();
+ UsecaseRoles usecaseRoles;
+ try{
+ usecaseRoles = (UsecaseRoles) getCache().get(configurationUri, builder);
+ }catch(CachingException e){
+ throw new AccessControlException(e);
+ }
+ if(usecaseRoles == null){
+ throw new AccessControlException("Usecase policies configuration not found at [" + configurationUri + "]");
+ }
+ if(usecaseRoles.hasRoles(usecase)){
+ getLogger().debug("Roles for usecase found.");
+ List usecaseRoleIds = Arrays.asList(usecaseRoles.getRoles(usecase));
+ int i = 0;
+ authorized = false;
+ while(!authorized && i < roles.length){
+ authorized = usecaseRoleIds.contains(roles[i].getId());
+ getLogger().debug("Authorization for role [" + roles[i].getId() + "] is [" + authorized + "]");
+ i++;
+ }
+ }else{
+ getLogger().debug("No roles for usecase found. Granting access.");
+ }
+ return authorized;
+ }
+ private ServiceManager manager;
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ getLogger().debug("Servicing [" + getClass().getName() + "]");
+ this.manager = manager;
+ this.cache = (SourceCache) manager.lookup(SourceCache.ROLE);
+ }
+ /**
+ * @see org.apache.avalon.framework.activity.Disposable#dispose()
+ */
+ public void dispose() {
+ if(getCache() != null){
+ manager.release(getCache());
+ }
+ }
+ public static final String CONFIGURATION_FILE = "/config/ac/usecase-policies.xml";
+ public static final String PARAMETER_CONFIGURATION = "configuration";
+ /**
+ * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters)
+ */
+ public void parameterize(Parameters parameters) throws ParameterException {
+ if(parameters.isParameter(PARAMETER_CONFIGURATION)){
+ this.configurationUri = parameters.getParameter(PARAMETER_CONFIGURATION);
+ }
+ }
+ /**
+ * Returns the configuration URL.
+ *
+ * @return The configuration URL.
+ */
+ public String getConfigurationURI() {
+ return configurationUri;
+ }
+ /**
+ * Authorizes a usecase.
+ *
+ * @param usecase
+ * The usecase to authorize.
+ * @param roles
+ * The roles of the identity.
+ * @param publication
+ * The publication.
+ * @return A boolean value.
+ * @throws AccessControlException
+ * when something went wrong.
+ */
+ public boolean authorizeUsecase(String usecase, Role[] roles, Publication publication) throws AccessControlException {
+ return authorizeUsecase(usecase, roles, getConfigurationURI(publication));
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ac/workflow/WorkflowAuthorizer.java Tue Sep 9 17:30:20 2008
@@ -14,11 +14,8 @@
* limitations under the License.
*
*/
-
/* $Id$ */
-
package org.apache.lenya.cms.ac.workflow;
-
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
@@ -31,97 +28,76 @@
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.DocumentBuilder;
import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationFactory;
+import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.workflow.WorkflowFactory;
+import org.apache.lenya.util.Globals;
import org.apache.lenya.workflow.Event;
import org.apache.lenya.workflow.Situation;
import org.apache.lenya.workflow.SynchronizedWorkflowInstances;
-
/**
- * If the client requested invoking a workflow event, this authorizer checks if the current
- * document state and identity roles allow this transition.
+ * If the client requested invoking a workflow event, this authorizer checks if the current document state and identity roles allow this transition.
*/
public class WorkflowAuthorizer extends AbstractLogEnabled implements Authorizer, Serviceable {
-
- protected static final String EVENT_PARAMETER = "lenya.event";
-
- /**
- * @see org.apache.lenya.ac.Authorizer#authorize(org.apache.cocoon.environment.Request)
- */
- public boolean authorize(Request request) throws AccessControlException {
-
- boolean authorized = true;
-
- String requestUri = request.getRequestURI();
- String context = request.getContextPath();
-
- if (context == null) {
- context = "";
- }
-
- String url = requestUri.substring(context.length());
-
- String event = request.getParameter(EVENT_PARAMETER);
- SourceResolver resolver = null;
-
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Authorizing workflow for event [" + event + "]");
- }
-
- if (event != null) {
-
- try {
- resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
- Publication publication = PublicationFactory.getPublication(resolver, request);
-
- DocumentBuilder builder = publication.getDocumentBuilder();
- if (builder.isDocument(publication, url)) {
-
- Document document = builder.buildDocument(publication, url);
- WorkflowFactory factory = WorkflowFactory.newInstance();
-
- if (factory.hasWorkflow(document)) {
- SynchronizedWorkflowInstances instance =
- factory.buildSynchronizedInstance(document);
-
- authorized = false;
-
- Situation situation = WorkflowHelper.buildSituation(request);
- Event[] events = instance.getExecutableEvents(situation);
- int i = 0;
-
- while (!authorized && (i < events.length)) {
- if (events[i].getName().equals(event)) {
- authorized = true;
- }
- if (getLogger().isDebugEnabled()) {
- getLogger().debug(" Event [" + events[i] + "] is executable.");
- }
-
- i++;
- }
- }
- }
-
- } catch (Exception e) {
- throw new AccessControlException(e);
- } finally {
- if (resolver != null) {
- manager.release(resolver);
- }
- }
- }
-
- return authorized;
- }
-
- private ServiceManager manager;
-
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
- */
- public void service(ServiceManager manager) throws ServiceException {
- this.manager = manager;
- }
-
+ protected static final String EVENT_PARAMETER = "lenya.event";
+ /**
+ * @see org.apache.lenya.ac.Authorizer#authorize(org.apache.cocoon.environment.Request)
+ */
+ public boolean authorize(Request request) throws AccessControlException {
+ boolean authorized = true;
+ String requestUri = request.getRequestURI();
+ String context = request.getContextPath();
+ if(context == null){
+ context = "";
+ }
+ String url = requestUri.substring(context.length());
+ String event = request.getParameter(EVENT_PARAMETER);
+ SourceResolver resolver = null;
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Authorizing workflow for event [" + event + "]");
+ }
+ if(event != null){
+ try{
+ resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
+ Publication publication = Globals.getPublication();
+ if(null == publication){
+ throw new PublicationException("WorkflowAuthorizer.authorize: No Publication.");
+ }
+ DocumentBuilder builder = publication.getDocumentBuilder();
+ if(builder.isDocument(publication, url)){
+ Document document = builder.buildDocument(publication, url);
+ WorkflowFactory factory = WorkflowFactory.newInstance();
+ if(factory.hasWorkflow(document)){
+ SynchronizedWorkflowInstances instance = factory.buildSynchronizedInstance(document);
+ authorized = false;
+ Situation situation = WorkflowHelper.buildSituation(request);
+ Event[] events = instance.getExecutableEvents(situation);
+ int i = 0;
+ while(!authorized && (i < events.length)){
+ if(events[i].getName().equals(event)){
+ authorized = true;
+ }
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug(" Event [" + events[i] + "] is executable.");
+ }
+ i++;
+ }
+ }
+ }
+ }catch(Exception e){
+ throw new AccessControlException(e);
+ }finally{
+ if(resolver != null){
+ manager.release(resolver);
+ }
+ }
+ }
+ return authorized;
+ }
+ private ServiceManager manager;
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ant/PublicationTask.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ant/PublicationTask.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ant/PublicationTask.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/ant/PublicationTask.java Tue Sep 9 17:30:20 2008
@@ -16,80 +16,78 @@
*/
/* $Id$ */
package org.apache.lenya.cms.ant;
-
import java.io.File;
-import java.io.IOException;
import org.apache.lenya.cms.publication.Publication;
import org.apache.lenya.cms.publication.PublicationException;
-import org.apache.lenya.cms.publication.PublicationFactory;
import org.apache.lenya.cms.task.AntTask;
+import org.apache.lenya.util.Globals;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
-
/**
- * Abstract base class for publication-dependent Ant tasks. It requires some
- * project parameters that are set by the AntTask.
+ * Abstract base class for publication-dependent Ant tasks. It requires some project parameters that are set by the AntTask.
*/
public abstract class PublicationTask extends Task {
- /** Creates a new instance of PublicationTask */
- public PublicationTask() {
- }
- /**
- * Returns the publication directory.
- *
- * @return a the path to the publication directory as a <code>File</code>
- */
- protected File getPublicationDirectory() {
- return new File(getProject().getProperty(AntTask.PUBLICATION_DIRECTORY));
- }
- /**
- * Return the context prefix.
- *
- * @return the context-prefix
- */
- protected String getContextPrefix() {
- return getProject().getProperty(AntTask.CONTEXT_PREFIX);
- }
- /**
- * Returns the publication ID.
- *
- * @return the publication-id
- */
- protected String getPublicationId() {
- return getProject().getProperty(AntTask.PUBLICATION_ID);
- }
- /**
- * Returns the servlet context (e.g., <code>tomcat/webapp/lenya</code>)
- *
- * @return the servlet-context
- */
- protected File getServletContext() {
- return new File(getProject().getProperty(AntTask.SERVLET_CONTEXT_PATH));
- }
- /**
- * Get the publication
- *
- * @return the publication
- *
- * @throws BuildException
- * if the publication could not be found
- */
- protected Publication getPublication() throws BuildException {
- try {
- return PublicationFactory.getPublication(getPublicationId(), getServletContext().getCanonicalPath());
- } catch (IOException e) {
- throw new BuildException(e);
- } catch (PublicationException e) {
- throw new BuildException(e);
- }
- }
- /**
- * Utility method for assertion that a string is != null and != ""
- *
- * @param string
- * the string to check
- */
- protected void assertString(String string) {
- // assert(string != null) && !string.equals("");
- }
+ /** Creates a new instance of PublicationTask */
+ public PublicationTask() {
+ }
+ /**
+ * Returns the publication directory.
+ *
+ * @return a the path to the publication directory as a <code>File</code>
+ */
+ protected File getPublicationDirectory() {
+ return new File(getProject().getProperty(AntTask.PUBLICATION_DIRECTORY));
+ }
+ /**
+ * Return the context prefix.
+ *
+ * @return the context-prefix
+ */
+ protected String getContextPrefix() {
+ return getProject().getProperty(AntTask.CONTEXT_PREFIX);
+ }
+ /**
+ * Returns the publication ID.
+ *
+ * @return the publication-id
+ */
+ protected String getPublicationId() {
+ return getProject().getProperty(AntTask.PUBLICATION_ID);
+ }
+ /**
+ * Returns the servlet context (e.g., <code>tomcat/webapp/lenya</code>)
+ *
+ * @return the servlet-context
+ */
+ protected File getServletContext() {
+ return new File(getProject().getProperty(AntTask.SERVLET_CONTEXT_PATH));
+ }
+ /**
+ * Get the publication
+ *
+ * @return the publication
+ *
+ * @throws BuildException
+ * if the publication could not be found
+ */
+ protected Publication getPublication() throws BuildException {
+ try{
+ Publication publication = Globals.getPublication(getPublicationId());
+ if(null == publication){
+ throw new PublicationException("UsecaseAuthorizer.authorize: No Publication.");
+ }
+ return publication;
+ }catch(PublicationException e){
+ throw new BuildException(e);
+ }
+ }
+ /**
+ * Utility method for assertion that a string is != null and != ""
+ *
+ * @param string
+ * the string to check
+ */
+ protected void assertString(String string) {
+ // assert(string != null) && !string.equals("");
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/DefaultCreatorAction.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/DefaultCreatorAction.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/DefaultCreatorAction.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/DefaultCreatorAction.java Tue Sep 9 17:30:20 2008
@@ -27,7 +27,6 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.acting.AbstractComplementaryConfigurableAction;
-import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Redirector;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Session;
@@ -35,8 +34,9 @@
import org.apache.lenya.cms.authoring.ParentChildCreatorInterface;
import org.apache.lenya.cms.publication.Label;
import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationFactory;
+import org.apache.lenya.cms.publication.PublicationException;
import org.apache.lenya.cms.publication.SiteTree;
+import org.apache.lenya.util.Globals;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
@@ -82,9 +82,12 @@
* DOCUMENT ME!
*/
public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws Exception {
- Publication publication = PublicationFactory.getPublication(objectModel);
+ Publication publication = Globals.getPublication();
+ if(null == publication){
+ throw new PublicationException("DefaultCreatorAction.act: No Publication.");
+ }
// Get request object
- Request request = ObjectModelHelper.getRequest(objectModel);
+ Request request = Globals.getRequest();
if(request == null){
getLogger().error("No request object");
return null;
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/ParentChildCreatorAction.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/ParentChildCreatorAction.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/ParentChildCreatorAction.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/acting/ParentChildCreatorAction.java Tue Sep 9 17:30:20 2008
@@ -14,11 +14,8 @@
* limitations under the License.
*
*/
-
/* $Id$ */
-
package org.apache.lenya.cms.cocoon.acting;
-
import java.io.File;
import java.util.Enumeration;
import java.util.HashMap;
@@ -41,330 +38,263 @@
import org.apache.excalibur.source.Source;
import org.apache.lenya.cms.authoring.ParentChildCreatorInterface;
import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.PublicationFactory;
+import org.apache.lenya.cms.publication.PublicationException;
+import org.apache.lenya.util.Globals;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
-
-public class ParentChildCreatorAction extends AbstractComplementaryConfigurableAction
- implements Configurable {
- private String treeAuthoringPath = null;
- private String docsPath = null;
- private String doctypesPath = null;
-
- /**
- * DOCUMENT ME!
- *
- * @param conf DOCUMENT ME!
- *
- * @throws ConfigurationException DOCUMENT ME!
- */
- public void configure(Configuration conf) throws ConfigurationException {
- super.configure(conf);
-
- treeAuthoringPath = conf.getChild("tree-authoring").getAttribute("href");
- docsPath = conf.getChild("docs").getAttribute("href");
- doctypesPath = conf.getChild("doctypes").getAttribute("href");
- getLogger().debug("CONFIGURATION:\nAUTHORING PATH OF TREE=" + treeAuthoringPath);
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param redirector DOCUMENT ME!
- * @param resolver DOCUMENT ME!
- * @param objectModel DOCUMENT ME!
- * @param src DOCUMENT ME!
- * @param parameters DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- *
- * @throws Exception DOCUMENT ME!
- */
- public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String src,
- Parameters parameters) throws Exception {
- Source input_source = resolver.resolveURI("");
- String sitemapParentPath = input_source.getURI();
- sitemapParentPath = sitemapParentPath.substring(5); // Remove "file:" protocol
-
- getLogger().debug(".act(): PARENT PATH OF SITEMAP: " + sitemapParentPath);
-
- // Get request object
- Request request = ObjectModelHelper.getRequest(objectModel);
-
- if (request == null) {
- getLogger().error("No request object");
-
- return null;
- }
-
- // Get parameters
- String parentid = request.getParameter("parentid");
- if (parentid == null) {
- getLogger().warn("No parentid parameter defined! It might be necessary to specify a parentid request parameter.");
- }
- String childid = request.getParameter("childid");
- if (childid == null) {
- getLogger().error("No childid parameter defined! Please specify childid as request parameter.");
- throw new Exception("No childname defined!");
- }
- String childname = request.getParameter("childname");
- if (childname == null) {
- getLogger().error("No childname defined! Please specify childname as request parameter which is being used as label within a sitetree or topic map.");
- throw new Exception("No childname defined!");
- }
- String childtype = request.getParameter("childtype");
- if (childtype == null) {
- getLogger().error("No childtype defined! Please specify childtype as request parameter with value either \"branch\" or \"leaf\".");
- throw new Exception("No childname defined!");
- }
- short childType;
-
- if (childtype.equals("branch")) {
- childType = ParentChildCreatorInterface.BRANCH_NODE;
- } else if (childtype.equals("leaf")) {
- childType = ParentChildCreatorInterface.LEAF_NODE;
- } else {
- getLogger().error("No such child type: " + childtype);
- return null;
- }
-
- String doctype = request.getParameter("doctype");
- if (doctype == null) {
- getLogger().warn("No doctype defined! Please specify doctype as request parameter, which is being used to resolve the creator within doctypes.xconf. Otherwise the DefaultCreator class is being used (see below)!");
- }
- String language = request.getParameter("language");
-
- if (!validate(parentid, childid, childname, childtype, doctype)) {
- getLogger().error("Exception: Validation of parameters failed");
-
- return null;
- }
-
- // Get session
- Session session = request.getSession(true);
-
- if (session == null) {
- getLogger().error("No session object");
-
- return null;
- }
-
- // Get creator
- ParentChildCreatorInterface creator = null;
- String absoluteDoctypesPath = sitemapParentPath + doctypesPath;
- Document doctypesDoc = new SAXReader().read("file:" + absoluteDoctypesPath +
- "doctypes.xconf");
- Attribute creator_src = (Attribute) doctypesDoc.selectSingleNode("/doctypes/doc[@type='" +
- doctype + "']/creator/@src");
-
- if (creator_src != null) {
- getLogger().info(".act(): Creator found for \"" + doctype + "\": " +
- creator_src.getName() + " " + creator_src.getPath() + " " + creator_src.getValue());
-
- // now get the constructor that accepts the configuration
- Class creatorClass = Class.forName(creator_src.getValue());
- creator = (ParentChildCreatorInterface) creatorClass.newInstance();
- } else {
- getLogger().warn("No creator found for \"" + doctype +
- "\". DefaultBranchCreator will be taken.");
- creator = new org.apache.lenya.cms.authoring.DefaultBranchCreator();
- }
-
- getLogger().debug(".act(): Creator : " + creator.getClass().getName());
-
- // Init creator
- // "Read" the configuration from the DOM node
- DefaultConfigurationBuilder defaultConfigBuilder = new DefaultConfigurationBuilder();
- Configuration[] docTypeConfigs = defaultConfigBuilder.buildFromFile(absoluteDoctypesPath +
- "doctypes.xconf").getChildren();
-
- Configuration doctypeConf = null;
-
- for (int i = 0; i < docTypeConfigs.length; i++) {
- String typeName = docTypeConfigs[i].getAttribute("type");
-
- if (typeName.equals(doctype)) {
- doctypeConf = docTypeConfigs[i].getChild("creator", false);
- }
- }
-
- creator.init(doctypeConf);
-
- // Transaction should actually be started here!
- String treefilename = sitemapParentPath + treeAuthoringPath;
- getLogger().debug(".act(): Filename of tree: " + treefilename);
-
- if (!new File(treefilename).exists()) {
- getLogger().warn("No sitetree or topic map: " + treefilename);
- } else {
- if (!updateTree(childtype, childType, childid, childname, parentid, doctype, creator, treefilename)) return null;
- }
- // Transaction should actually be finished here!
-
-
- // Create actual document
- // grab all the parameters from session, request params and
- // sitemap params
- HashMap allParameters = new HashMap();
- String[] names = parameters.getNames();
-
- for (int i = 0; i < names.length; i++) {
- String name = names[i];
- String value = null;
-
- try {
- value = parameters.getParameter(name);
- } catch (ParameterException pe) {
- value = null;
- }
-
- allParameters.put(name, value);
- }
-
- Enumeration requestParameters = request.getParameterNames();
-
- while (requestParameters.hasMoreElements()) {
- String requestParameterName = (String) requestParameters.nextElement();
-
- if (allParameters.containsKey(requestParameterName)) {
- // we do not allow name clashes
- throw new ProcessingException("Name clash in request parameter " +
- "and sitemap parameter: " + requestParameterName);
- }
-
- allParameters.put(requestParameterName, request.getParameter(requestParameterName));
- }
-
- Enumeration sessionAttributeNames = session.getAttributeNames();
-
- while (sessionAttributeNames.hasMoreElements()) {
- String sessionAttributeName = (String) sessionAttributeNames.nextElement();
-
- if (allParameters.containsKey(sessionAttributeName)) {
- // we do not allow name clashes
- throw new ProcessingException("Name clash in session attribute " +
- "and request parameter or sitemap parameter: " + sessionAttributeName);
- }
-
- allParameters.put(sessionAttributeName, session.getAttribute(sessionAttributeName));
- }
-
- try {
- Publication publication = PublicationFactory.getPublication(objectModel);
- creator.create(publication, new File(absoluteDoctypesPath + "samples"),
- new File(sitemapParentPath + docsPath + parentid), parentid, childid, childType, childname, language,
- allParameters);
- } catch (Exception e) {
- getLogger().error("Creator threw exception: " + e);
- }
-
- // Redirect to referer
- String parent_uri = (String) session.getAttribute(
- "org.apache.lenya.cms.cocoon.acting.ParentChildCreatorAction.parent_uri");
- getLogger().info(".act(): Child added");
-
- HashMap actionMap = new HashMap();
- actionMap.put("parent_uri", parent_uri);
- session.removeAttribute(
- "org.apache.lenya.cms.cocoon.acting.ParentChildCreatorAction.parent_uri");
-
- return actionMap;
- }
-
- /**
- * DOCUMENT ME!
- *
- * @param parentid DOCUMENT ME!
- * @param childid DOCUMENT ME!
- * @param childname DOCUMENT ME!
- * @param childtype DOCUMENT ME!
- * @param doctype DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public boolean validate(String parentid, String childid, String childname, String childtype,
- String doctype) {
- getLogger().debug(".validate(): parentid=" + parentid + " ; childid=" + childid +
- " ; childname=" + childname + " ; childtype=" + childtype + " ; doctype=" + doctype);
-
- if ((childid.indexOf(" ") >= 0) || (childid.length() == 0)) {
- return false;
- }
-
- if (childname.length() == 0) {
- return false;
- }
-
- return true;
- }
-
- /**
- *
- */
- private boolean updateTree(String childtype, short childType, String childid, String childname, String parentid, String doctype, ParentChildCreatorInterface creator, String treefilename) throws Exception {
- Document doc = new SAXReader().read("file:" + treefilename);
-
- // Get parent element
- StringTokenizer st = new StringTokenizer(parentid, "/");
- String xpath_string = "/tree/branch"; // Trunk of tree
-
- while (st.hasMoreTokens()) {
- xpath_string = xpath_string + "/branch[@relURI='" + st.nextToken() + "']";
- }
-
- getLogger().debug("XPATH: " + xpath_string);
-
- XPath xpathSelector = DocumentHelper.createXPath(xpath_string);
- List nodes = xpathSelector.selectNodes(doc);
-
- if (nodes.isEmpty()) {
- getLogger().error(".act(): No nodes: " + xpath_string);
- getLogger().error(".act(): No child added!");
-
- return false;
- }
-
- Element parent_element = (Element) nodes.get(0);
- getLogger().debug("PARENT ELEMENT: " + parent_element.getPath());
-
- // Set child type: branch or leaf
- childType = creator.getChildType(childType);
-
- if (childType == ParentChildCreatorInterface.BRANCH_NODE) {
- childtype = "branch";
- } else {
- childtype = "leaf";
- }
-
- // Check if child already exists
- String newChildXPath = xpath_string + "/" + childtype;
- getLogger().debug("CHECK: " + newChildXPath);
-
- if (doc.selectSingleNode(newChildXPath + "[@relURI='" +
- creator.generateTreeId(childid, childType) + "']") != null) {
- getLogger().error("Exception: XPath exists: " + newChildXPath + "[@relURI='" +
- creator.generateTreeId(childid, childType) + "']");
- getLogger().error("No child added");
-
- return false;
- }
-
- // Add node: branch or leaf
- parent_element.addElement(childtype)
- .addAttribute("relURI", creator.generateTreeId(childid, childType))
- .addAttribute("doctype", doctype).addAttribute("menuName",
- creator.getChildName(childname));
- getLogger().debug("Tree has been modified: " + doc.asXML());
-
- // Write new tree
- java.io.FileWriter fileWriter = new java.io.FileWriter(treefilename);
- doc.write(fileWriter);
- fileWriter.close();
-
- return true;
- }
+public class ParentChildCreatorAction extends AbstractComplementaryConfigurableAction implements Configurable {
+ private String treeAuthoringPath = null;
+ private String docsPath = null;
+ private String doctypesPath = null;
+ /**
+ * DOCUMENT ME!
+ *
+ * @param conf
+ * DOCUMENT ME!
+ *
+ * @throws ConfigurationException
+ * DOCUMENT ME!
+ */
+ public void configure(Configuration conf) throws ConfigurationException {
+ super.configure(conf);
+ treeAuthoringPath = conf.getChild("tree-authoring").getAttribute("href");
+ docsPath = conf.getChild("docs").getAttribute("href");
+ doctypesPath = conf.getChild("doctypes").getAttribute("href");
+ getLogger().debug("CONFIGURATION:\nAUTHORING PATH OF TREE=" + treeAuthoringPath);
+ }
+ /**
+ * DOCUMENT ME!
+ *
+ * @param redirector
+ * DOCUMENT ME!
+ * @param resolver
+ * DOCUMENT ME!
+ * @param objectModel
+ * DOCUMENT ME!
+ * @param src
+ * DOCUMENT ME!
+ * @param parameters
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ *
+ * @throws Exception
+ * DOCUMENT ME!
+ */
+ public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String src, Parameters parameters) throws Exception {
+ Source input_source = resolver.resolveURI("");
+ String sitemapParentPath = input_source.getURI();
+ sitemapParentPath = sitemapParentPath.substring(5); // Remove "file:" protocol
+ getLogger().debug(".act(): PARENT PATH OF SITEMAP: " + sitemapParentPath);
+ // Get request object
+ Request request = ObjectModelHelper.getRequest(objectModel);
+ if(request == null){
+ getLogger().error("No request object");
+ return null;
+ }
+ // Get parameters
+ String parentid = request.getParameter("parentid");
+ if(parentid == null){
+ getLogger().warn("No parentid parameter defined! It might be necessary to specify a parentid request parameter.");
+ }
+ String childid = request.getParameter("childid");
+ if(childid == null){
+ getLogger().error("No childid parameter defined! Please specify childid as request parameter.");
+ throw new Exception("No childname defined!");
+ }
+ String childname = request.getParameter("childname");
+ if(childname == null){
+ getLogger().error("No childname defined! Please specify childname as request parameter which is being used as label within a sitetree or topic map.");
+ throw new Exception("No childname defined!");
+ }
+ String childtype = request.getParameter("childtype");
+ if(childtype == null){
+ getLogger().error("No childtype defined! Please specify childtype as request parameter with value either \"branch\" or \"leaf\".");
+ throw new Exception("No childname defined!");
+ }
+ short childType;
+ if(childtype.equals("branch")){
+ childType = ParentChildCreatorInterface.BRANCH_NODE;
+ }else if(childtype.equals("leaf")){
+ childType = ParentChildCreatorInterface.LEAF_NODE;
+ }else{
+ getLogger().error("No such child type: " + childtype);
+ return null;
+ }
+ String doctype = request.getParameter("doctype");
+ if(doctype == null){
+ getLogger().warn("No doctype defined! Please specify doctype as request parameter, which is being used to resolve the creator within doctypes.xconf. Otherwise the DefaultCreator class is being used (see below)!");
+ }
+ String language = request.getParameter("language");
+ if(!validate(parentid, childid, childname, childtype, doctype)){
+ getLogger().error("Exception: Validation of parameters failed");
+ return null;
+ }
+ // Get session
+ Session session = request.getSession(true);
+ if(session == null){
+ getLogger().error("No session object");
+ return null;
+ }
+ // Get creator
+ ParentChildCreatorInterface creator = null;
+ String absoluteDoctypesPath = sitemapParentPath + doctypesPath;
+ Document doctypesDoc = new SAXReader().read("file:" + absoluteDoctypesPath + "doctypes.xconf");
+ Attribute creator_src = (Attribute) doctypesDoc.selectSingleNode("/doctypes/doc[@type='" + doctype + "']/creator/@src");
+ if(creator_src != null){
+ getLogger().info(".act(): Creator found for \"" + doctype + "\": " + creator_src.getName() + " " + creator_src.getPath() + " " + creator_src.getValue());
+ // now get the constructor that accepts the configuration
+ Class creatorClass = Class.forName(creator_src.getValue());
+ creator = (ParentChildCreatorInterface) creatorClass.newInstance();
+ }else{
+ getLogger().warn("No creator found for \"" + doctype + "\". DefaultBranchCreator will be taken.");
+ creator = new org.apache.lenya.cms.authoring.DefaultBranchCreator();
+ }
+ getLogger().debug(".act(): Creator : " + creator.getClass().getName());
+ // Init creator
+ // "Read" the configuration from the DOM node
+ DefaultConfigurationBuilder defaultConfigBuilder = new DefaultConfigurationBuilder();
+ Configuration[] docTypeConfigs = defaultConfigBuilder.buildFromFile(absoluteDoctypesPath + "doctypes.xconf").getChildren();
+ Configuration doctypeConf = null;
+ for(int i = 0; i < docTypeConfigs.length; i++){
+ String typeName = docTypeConfigs[i].getAttribute("type");
+ if(typeName.equals(doctype)){
+ doctypeConf = docTypeConfigs[i].getChild("creator", false);
+ }
+ }
+ creator.init(doctypeConf);
+ // Transaction should actually be started here!
+ String treefilename = sitemapParentPath + treeAuthoringPath;
+ getLogger().debug(".act(): Filename of tree: " + treefilename);
+ if(!new File(treefilename).exists()){
+ getLogger().warn("No sitetree or topic map: " + treefilename);
+ }else{
+ if(!updateTree(childtype, childType, childid, childname, parentid, doctype, creator, treefilename)) return null;
+ }
+ // Transaction should actually be finished here!
+ // Create actual document
+ // grab all the parameters from session, request params and
+ // sitemap params
+ HashMap allParameters = new HashMap();
+ String[] names = parameters.getNames();
+ for(int i = 0; i < names.length; i++){
+ String name = names[i];
+ String value = null;
+ try{
+ value = parameters.getParameter(name);
+ }catch(ParameterException pe){
+ value = null;
+ }
+ allParameters.put(name, value);
+ }
+ Enumeration requestParameters = request.getParameterNames();
+ while(requestParameters.hasMoreElements()){
+ String requestParameterName = (String) requestParameters.nextElement();
+ if(allParameters.containsKey(requestParameterName)){
+ // we do not allow name clashes
+ throw new ProcessingException("Name clash in request parameter " + "and sitemap parameter: " + requestParameterName);
+ }
+ allParameters.put(requestParameterName, request.getParameter(requestParameterName));
+ }
+ Enumeration sessionAttributeNames = session.getAttributeNames();
+ while(sessionAttributeNames.hasMoreElements()){
+ String sessionAttributeName = (String) sessionAttributeNames.nextElement();
+ if(allParameters.containsKey(sessionAttributeName)){
+ // we do not allow name clashes
+ throw new ProcessingException("Name clash in session attribute " + "and request parameter or sitemap parameter: " + sessionAttributeName);
+ }
+ allParameters.put(sessionAttributeName, session.getAttribute(sessionAttributeName));
+ }
+ try{
+ Publication publication = Globals.getPublication();
+ if(null == publication){
+ throw new PublicationException("ParentChildCreatorAction.act: No Publication.");
+ }
+ creator.create(publication, new File(absoluteDoctypesPath + "samples"), new File(sitemapParentPath + docsPath + parentid), parentid, childid, childType, childname, language, allParameters);
+ }catch(Exception e){
+ getLogger().error("Creator threw exception: " + e);
+ }
+ // Redirect to referer
+ String parent_uri = (String) session.getAttribute("org.apache.lenya.cms.cocoon.acting.ParentChildCreatorAction.parent_uri");
+ getLogger().info(".act(): Child added");
+ HashMap actionMap = new HashMap();
+ actionMap.put("parent_uri", parent_uri);
+ session.removeAttribute("org.apache.lenya.cms.cocoon.acting.ParentChildCreatorAction.parent_uri");
+ return actionMap;
+ }
+ /**
+ * DOCUMENT ME!
+ *
+ * @param parentid
+ * DOCUMENT ME!
+ * @param childid
+ * DOCUMENT ME!
+ * @param childname
+ * DOCUMENT ME!
+ * @param childtype
+ * DOCUMENT ME!
+ * @param doctype
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public boolean validate(String parentid, String childid, String childname, String childtype, String doctype) {
+ getLogger().debug(".validate(): parentid=" + parentid + " ; childid=" + childid + " ; childname=" + childname + " ; childtype=" + childtype + " ; doctype=" + doctype);
+ if((childid.indexOf(" ") >= 0) || (childid.length() == 0)){
+ return false;
+ }
+ if(childname.length() == 0){
+ return false;
+ }
+ return true;
+ }
+ /**
+ *
+ */
+ private boolean updateTree(String childtype, short childType, String childid, String childname, String parentid, String doctype, ParentChildCreatorInterface creator, String treefilename) throws Exception {
+ Document doc = new SAXReader().read("file:" + treefilename);
+ // Get parent element
+ StringTokenizer st = new StringTokenizer(parentid, "/");
+ String xpath_string = "/tree/branch"; // Trunk of tree
+ while(st.hasMoreTokens()){
+ xpath_string = xpath_string + "/branch[@relURI='" + st.nextToken() + "']";
+ }
+ getLogger().debug("XPATH: " + xpath_string);
+ XPath xpathSelector = DocumentHelper.createXPath(xpath_string);
+ List nodes = xpathSelector.selectNodes(doc);
+ if(nodes.isEmpty()){
+ getLogger().error(".act(): No nodes: " + xpath_string);
+ getLogger().error(".act(): No child added!");
+ return false;
+ }
+ Element parent_element = (Element) nodes.get(0);
+ getLogger().debug("PARENT ELEMENT: " + parent_element.getPath());
+ // Set child type: branch or leaf
+ childType = creator.getChildType(childType);
+ if(childType == ParentChildCreatorInterface.BRANCH_NODE){
+ childtype = "branch";
+ }else{
+ childtype = "leaf";
+ }
+ // Check if child already exists
+ String newChildXPath = xpath_string + "/" + childtype;
+ getLogger().debug("CHECK: " + newChildXPath);
+ if(doc.selectSingleNode(newChildXPath + "[@relURI='" + creator.generateTreeId(childid, childType) + "']") != null){
+ getLogger().error("Exception: XPath exists: " + newChildXPath + "[@relURI='" + creator.generateTreeId(childid, childType) + "']");
+ getLogger().error("No child added");
+ return false;
+ }
+ // Add node: branch or leaf
+ parent_element.addElement(childtype).addAttribute("relURI", creator.generateTreeId(childid, childType)).addAttribute("doctype", doctype).addAttribute("menuName", creator.getChildName(childname));
+ getLogger().debug("Tree has been modified: " + doc.asXML());
+ // Write new tree
+ java.io.FileWriter fileWriter = new java.io.FileWriter(treefilename);
+ doc.write(fileWriter);
+ fileWriter.close();
+ return true;
+ }
}
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DocumentURLModule.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DocumentURLModule.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DocumentURLModule.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DocumentURLModule.java Tue Sep 9 17:30:20 2008
@@ -20,6 +20,7 @@
import java.util.Map;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.cocoon.components.modules.input.AbstractInputModule;
import org.apache.lenya.cms.publication.DocumentHelper;
/**
* <p>
@@ -31,18 +32,14 @@
*
* @version: $Id$
*/
-public class DocumentURLModule extends AbstractPageEnvelopeModule {
- // public class DocumentURLModule extends AbstractPageEnvelopeModule implements Serviceable {
- // private ServiceManager manager;
+public class DocumentURLModule extends AbstractInputModule {
/**
* @see org.apache.cocoon.components.modules.input.InputModule#getAttribute(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
*/
public Object getAttribute(String name, Configuration modeConf, Map objectModel) throws ConfigurationException {
String url;
final String[] attributes = name.split(":");
- if(attributes.length < 3){
- throw new ConfigurationException("Invalid number of parameters: " + attributes.length + ". Expected 3 (area, document-id, language)");
- }
+ if(attributes.length < 3){ throw new ConfigurationException("Invalid number of parameters: " + attributes.length + ". Expected 3 (area, document-id, language)"); }
final String area = attributes[0];
final String documentId = attributes[1];
final String language = attributes[2];
@@ -67,10 +64,4 @@
Object[] objects = {getAttribute(name, modeConf, objectModel)};
return objects;
}
- // /**
- // * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
- // */
- // public void service(ServiceManager manager) throws ServiceException {
- // this.manager = manager;
- // }
}
\ No newline at end of file
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DublinCoreModule.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DublinCoreModule.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DublinCoreModule.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/DublinCoreModule.java Tue Sep 9 17:30:20 2008
@@ -23,6 +23,7 @@
import java.util.Map;
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.cocoon.components.modules.input.AbstractInputModule;
import org.apache.lenya.cms.publication.Document;
import org.apache.lenya.cms.publication.DocumentException;
import org.apache.lenya.cms.publication.DublinCoreImpl;
@@ -31,23 +32,19 @@
/**
* Input module to access the dublin core values.
*/
-public class DublinCoreModule extends AbstractPageEnvelopeModule {
+public class DublinCoreModule extends AbstractInputModule {
/**
* @see org.apache.cocoon.components.modules.input.InputModule#getAttribute(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
*/
public Object getAttribute(String name, Configuration modeConf, Map objectModel) throws ConfigurationException {
- if(!Arrays.asList(DublinCoreImpl.ELEMENTS).contains(name) && !Arrays.asList(DublinCoreImpl.TERMS).contains(name)){
- throw new ConfigurationException("The attribute [" + name + "] is not supported!");
- }
+ if(!Arrays.asList(DublinCoreImpl.ELEMENTS).contains(name) && !Arrays.asList(DublinCoreImpl.TERMS).contains(name)){ throw new ConfigurationException("The attribute [" + name + "] is not supported!"); }
Document document;
try{
document = PageEnvelope.getCurrent().getDocument();
}catch(PageEnvelopeException e1){
throw new ConfigurationException("Resolving page envelope failed: ", e1);
}
- if(document == null){
- throw new ConfigurationException("There is no document for this page envelope!");
- }
+ if(document == null){ throw new ConfigurationException("There is no document for this page envelope!"); }
Object value;
try{
value = document.getDublinCore().getFirstValue(name);
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/FallbackModule.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/FallbackModule.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/FallbackModule.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/FallbackModule.java Tue Sep 9 17:30:20 2008
@@ -14,11 +14,8 @@
* limitations under the License.
*
*/
-
/* $Id$ */
-
package org.apache.lenya.cms.cocoon.components.modules.input;
-
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
@@ -30,196 +27,166 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
+import org.apache.cocoon.components.modules.input.AbstractInputModule;
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
import org.apache.excalibur.source.SourceUtil;
-
/**
* <p>
- * This module checks if a file exists in a publiation, and if not, it chooses the core file. The
- * attribute name must a path relatively to the <code>webapps/lenya/lenya</code> directory.
+ * This module checks if a file exists in a publiation, and if not, it chooses the core file. The attribute name must a path relatively to the <code>webapps/lenya/lenya</code> directory.
* </p>
* <p>
- * Example: <code>{fallback:xslt/style.xsl}</code> looks if
- * <code>lenya/pubs/(publication-id)/lenya/xslt/style.xsl</code> exists, and if not, it uses
- * <code>lenya/xslt/style.xsl</code>.
+ * Example: <code>{fallback:xslt/style.xsl}</code> looks if <code>lenya/pubs/(publication-id)/lenya/xslt/style.xsl</code> exists, and if not, it uses <code>lenya/xslt/style.xsl</code>.
*/
-public class FallbackModule extends AbstractPageEnvelopeModule implements Serviceable {
-
- private ServiceManager manager;
-
- private String[] baseUris;
-
- public static final String PATH_PREFIX = "lenya/";
-
- protected static final String ELEMENT_PATH = "directory";
-
- protected static final String ATTRIBUTE_SRC = "src";
-
- /**
- * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
- */
- public void configure(Configuration conf) throws ConfigurationException {
- super.configure(conf);
-
- Configuration[] pathConfigs = conf.getChildren(ELEMENT_PATH);
- List baseUriList = new ArrayList();
-
- SourceResolver resolver = null;
- try {
- resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
- Source source = null;
- for (int i = 0; i < pathConfigs.length; i++) {
- String uri = pathConfigs[i].getAttribute(ATTRIBUTE_SRC);
- try {
- source = resolver.resolveURI(uri);
- if (source.exists()) {
- File file = SourceUtil.getFile(source);
- if (file.isDirectory()) {
- baseUriList.add(uri);
- } else {
- getLogger().warn("Omitting path [" + uri + "] (not a directory).");
- }
- } else {
- getLogger().warn("Omitting path [" + uri + "] (does not exist).");
- }
- } catch (Exception e) {
- getLogger().error("Could not resolve path [" + uri + "]: ", e);
- throw e;
- } finally {
- if (source != null) {
- resolver.release(source);
- }
- }
+public class FallbackModule extends AbstractInputModule implements Serviceable {
+ private ServiceManager manager;
+ private String[] baseUris;
+ public static final String PATH_PREFIX = "lenya/";
+ protected static final String ELEMENT_PATH = "directory";
+ protected static final String ATTRIBUTE_SRC = "src";
+ /**
+ * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
+ */
+ public void configure(Configuration conf) throws ConfigurationException {
+ super.configure(conf);
+ Configuration[] pathConfigs = conf.getChildren(ELEMENT_PATH);
+ List baseUriList = new ArrayList();
+ SourceResolver resolver = null;
+ try{
+ resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
+ Source source = null;
+ for(int i = 0; i < pathConfigs.length; i++){
+ String uri = pathConfigs[i].getAttribute(ATTRIBUTE_SRC);
+ try{
+ source = resolver.resolveURI(uri);
+ if(source.exists()){
+ File file = SourceUtil.getFile(source);
+ if(file.isDirectory()){
+ baseUriList.add(uri);
+ }else{
+ getLogger().warn("Omitting path [" + uri + "] (not a directory).");
+ }
+ }else{
+ getLogger().warn("Omitting path [" + uri + "] (does not exist).");
+ }
+ }catch(Exception e){
+ getLogger().error("Could not resolve path [" + uri + "]: ", e);
+ throw e;
+ }finally{
+ if(source != null){
+ resolver.release(source);
+ }
}
- } catch (Exception e) {
- throw new ConfigurationException("Configuring failed: ", e);
- } finally {
- if (resolver != null) {
- manager.release(resolver);
+ }
+ }catch(Exception e){
+ throw new ConfigurationException("Configuring failed: ", e);
+ }finally{
+ if(resolver != null){
+ manager.release(resolver);
+ }
+ }
+ this.baseUris = (String[]) baseUriList.toArray(new String[baseUriList.size()]);
+ }
+ /**
+ * @see org.apache.cocoon.components.modules.input.InputModule#getAttribute(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
+ */
+ public Object getAttribute(String name, Configuration modeConf, Map objectModel) throws ConfigurationException {
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Resolving file for path [" + name + "]");
+ }
+ String resolvedUri = resolveURI(name, objectModel);
+ return resolvedUri;
+ }
+ /**
+ * Resolves the URI for a certain path.
+ *
+ * @param path
+ * The path.
+ * @param objectModel
+ * The object model.
+ * @return A string.
+ * @throws ConfigurationException
+ * if an error occurs.
+ */
+ protected String resolveURI(String path, Map objectModel) throws ConfigurationException {
+ String resolvedUri = null;
+ String checkedUris = "\n";
+ SourceResolver resolver = null;
+ try{
+ resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
+ String[] baseUris = getBaseURIs(objectModel);
+ Source source = null;
+ int i = 0;
+ while(resolvedUri == null && i < baseUris.length){
+ String uri = baseUris[i] + "/" + path;
+ checkedUris += uri + "\n";
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Trying to resolve URI [" + uri + "]");
}
- }
-
- this.baseUris = (String[]) baseUriList.toArray(new String[baseUriList.size()]);
- }
-
- /**
- * @see org.apache.cocoon.components.modules.input.InputModule#getAttribute(java.lang.String,
- * org.apache.avalon.framework.configuration.Configuration, java.util.Map)
- */
- public Object getAttribute(String name, Configuration modeConf, Map objectModel)
- throws ConfigurationException {
-
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Resolving file for path [" + name + "]");
- }
-
- String resolvedUri = resolveURI(name, objectModel);
- return resolvedUri;
- }
-
- /**
- * Resolves the URI for a certain path.
- * @param path The path.
- * @param objectModel The object model.
- * @return A string.
- * @throws ConfigurationException if an error occurs.
- */
- protected String resolveURI(String path, Map objectModel) throws ConfigurationException {
- String resolvedUri = null;
- String checkedUris = "\n";
-
- SourceResolver resolver = null;
- try {
- resolver = (SourceResolver) manager.lookup(SourceResolver.ROLE);
-
- String[] baseUris = getBaseURIs(objectModel);
- Source source = null;
- int i = 0;
- while (resolvedUri == null && i < baseUris.length) {
- String uri = baseUris[i] + "/" + path;
-
- checkedUris += uri + "\n";
-
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Trying to resolve URI [" + uri + "]");
- }
-
- try {
- source = resolver.resolveURI(uri);
- if (source.exists()) {
- resolvedUri = uri;
- } else {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Skipping URI [" + uri + "] (does not exist).");
- }
- }
- } catch (Exception e) {
- getLogger().error("Could not resolve URI [" + uri + "]: ", e);
- throw e;
- } finally {
- if (source != null) {
- resolver.release(source);
- }
- }
- i++;
+ try{
+ source = resolver.resolveURI(uri);
+ if(source.exists()){
+ resolvedUri = uri;
+ }else{
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Skipping URI [" + uri + "] (does not exist).");
+ }
+ }
+ }catch(Exception e){
+ getLogger().error("Could not resolve URI [" + uri + "]: ", e);
+ throw e;
+ }finally{
+ if(source != null){
+ resolver.release(source);
+ }
}
-
- } catch (Exception e) {
- throw new ConfigurationException("Resolving attribute [" + path + "] failed: ", e);
- } finally {
- if (resolver != null) {
- manager.release(resolver);
- }
- }
-
- if (resolvedUri == null) {
- throw new ConfigurationException("Could not resolve file for path [" + path + "]."
- + "\nChecked URIs:" + checkedUris);
- }
- else {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Resolved URI: [" + resolvedUri + "]");
- }
- }
- return resolvedUri;
- }
-
- /**
- * Returns the base directory URIs in the order they should be traversed.
- * @param objectModel The object model.
- * @return An array of strings.
- * @throws ConfigurationException if an error occurs.
- */
- protected String[] getBaseURIs(Map objectModel) throws ConfigurationException {
- return this.baseUris;
- }
-
- /**
- * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeNames(org.apache.avalon.framework.configuration.Configuration,
- * java.util.Map)
- */
- public Iterator getAttributeNames(Configuration modeConf, Map objectModel)
- throws ConfigurationException {
- return Collections.EMPTY_SET.iterator();
- }
-
- /**
- * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeValues(java.lang.String,
- * org.apache.avalon.framework.configuration.Configuration, java.util.Map)
- */
- public Object[] getAttributeValues(String name, Configuration modeConf, Map objectModel)
- throws ConfigurationException {
- Object[] objects = { getAttribute(name, modeConf, objectModel) };
-
- return objects;
- }
-
- /**
- * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
- */
- public void service(ServiceManager manager) throws ServiceException {
- this.manager = manager;
- }
-
+ i++;
+ }
+ }catch(Exception e){
+ throw new ConfigurationException("Resolving attribute [" + path + "] failed: ", e);
+ }finally{
+ if(resolver != null){
+ manager.release(resolver);
+ }
+ }
+ if(resolvedUri == null){
+ throw new ConfigurationException("Could not resolve file for path [" + path + "]." + "\nChecked URIs:" + checkedUris);
+ }else{
+ if(getLogger().isDebugEnabled()){
+ getLogger().debug("Resolved URI: [" + resolvedUri + "]");
+ }
+ }
+ return resolvedUri;
+ }
+ /**
+ * Returns the base directory URIs in the order they should be traversed.
+ *
+ * @param objectModel
+ * The object model.
+ * @return An array of strings.
+ * @throws ConfigurationException
+ * if an error occurs.
+ */
+ protected String[] getBaseURIs(Map objectModel) throws ConfigurationException {
+ return this.baseUris;
+ }
+ /**
+ * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeNames(org.apache.avalon.framework.configuration.Configuration, java.util.Map)
+ */
+ public Iterator getAttributeNames(Configuration modeConf, Map objectModel) throws ConfigurationException {
+ return Collections.EMPTY_SET.iterator();
+ }
+ /**
+ * @see org.apache.cocoon.components.modules.input.InputModule#getAttributeValues(java.lang.String, org.apache.avalon.framework.configuration.Configuration, java.util.Map)
+ */
+ public Object[] getAttributeValues(String name, Configuration modeConf, Map objectModel) throws ConfigurationException {
+ Object[] objects = {getAttribute(name, modeConf, objectModel)};
+ return objects;
+ }
+ /**
+ * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
+ */
+ public void service(ServiceManager manager) throws ServiceException {
+ this.manager = manager;
+ }
}
\ No newline at end of file
Modified: lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java
URL: http://svn.apache.org/viewvc/lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java?rev=693670&r1=693669&r2=693670&view=diff
==============================================================================
--- lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java (original)
+++ lenya/branches/revolution/1.3.x/src/java/org/apache/lenya/cms/cocoon/components/modules/input/PageEnvelopeModule.java Tue Sep 9 17:30:20 2008
@@ -27,6 +27,7 @@
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceManager;
import org.apache.avalon.framework.service.Serviceable;
+import org.apache.cocoon.components.modules.input.AbstractInputModule;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.commons.lang.StringUtils;
@@ -40,7 +41,7 @@
*
* @see org.apache.lenya.cms.publication.PageEnvelope
*/
-public class PageEnvelopeModule extends AbstractPageEnvelopeModule implements Serviceable {
+public class PageEnvelopeModule extends AbstractInputModule implements Serviceable {
private ServiceManager manager;
/**
* Get the the page envelope for the given objectModel.
@@ -115,8 +116,7 @@
}else if(name.equals(PageEnvelope.DOCUMENT_LANGUAGE)){
value = envelope.getDocument().getLanguage();
// LENYA1.3 - BEGIN
- if(((String) value).length() < 1)
- value = envelope.getPublication().getDefaultLanguage();
+ if(((String) value).length() < 1) value = envelope.getPublication().getDefaultLanguage();
// LENYA1.3 - END
}else if(name.equals(PageEnvelope.DOCUMENT_LANGUAGES)){
value = envelope.getDocument().getLanguages();
@@ -223,9 +223,7 @@
// FIXME Maybe make this more configureable
private String filterURI(final String uri) {
final int index = uri.indexOf(";jsessionid");
- if(index >= 0)
- return uri.substring(0, index);
- else
- return uri;
+ if(index >= 0) return uri.substring(0, index);
+ else return uri;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org