You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by df...@apache.org on 2004/06/15 18:34:21 UTC

cvs commit: jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor TemplateMapRenderer.java

dflorey     2004/06/15 09:34:21

  Modified:    proposals/projector/src/java/org/apache/slide/projector/processor/form
                        ControlComposer.java Form.java FormHandler.java
                        Trigger.java
               proposals/projector/src/java/org/apache/slide/projector/connector
                        Connector.java
               proposals/projector/src/java/org/apache/slide/projector/processor/core
                        CachedContent.java
               proposals/projector/src/java/org/apache/slide/projector/connector/webdav
                        WebdavConnector.java
               proposals/projector/src/java/org/apache/slide/projector/processor/process
                        Process.java ResultConfiguration.java
               proposals/projector/src/java/org/apache/slide/projector/processor/table
                        TableMapRenderer.java
               proposals/projector/src/java/org/apache/slide/projector
                        Constants.java
               proposals/projector/src/java/org/apache/slide/projector/processor
                        TemplateMapRenderer.java
  Added:       proposals/projector/src/java/org/apache/slide/projector/connector
                        UserExistsException.java
               proposals/projector/src/java/org/apache/slide/projector/processor/security
                        CreateUser.java DeleteUser.java
               proposals/projector/src/java/org/apache/slide/projector/processor/core
                        Bookmark.java
               proposals/projector/src/java/org/apache/slide/projector/processor/access
                        Get.java Remove.java Put.java
  Removed:     proposals/projector/src/java/org/apache/slide/projector/processor/security
                        PasswordValidator.java
               proposals/projector/src/java/org/apache/slide/projector/processor/core
                        Content.java
  Log:
  Started to build projector based admin application
  
  Revision  Changes    Path
  1.10      +0 -1      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java
  
  Index: ControlComposer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/ControlComposer.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- ControlComposer.java	8 Jun 2004 09:04:05 -0000	1.9
  +++ ControlComposer.java	15 Jun 2004 16:34:20 -0000	1.10
  @@ -114,7 +114,6 @@
           	new ParameterDescriptor(TRIGGER_DESCRIPTIONS, new ParameterMessage("controlComposer/triggerDescriptions"), new ArrayValueDescriptor(
           			new MapValueDescriptor(new ParameterDescriptor[] {
           					new ParameterDescriptor(Trigger.ACTION, new ParameterMessage("controlComposer/triggerDescriptions/action"), new URIValueDescriptor(), NullValue.NULL),
  -        					new ParameterDescriptor(Trigger.BOOKMARK, new ParameterMessage("controlComposer/triggerDescriptions/bookmark"), new URIValueDescriptor(), NullValue.NULL),
           					new ParameterDescriptor(Trigger.VALIDATE, new ParameterMessage("controlComposer/triggerDescriptions/validate"), new BooleanValueDescriptor(), BooleanValue.TRUE),
   							new ParameterDescriptor(Trigger.INVOLVED_PARAMETERS, new ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new StringValueDescriptor()), NullValue.NULL),
           					new ParameterDescriptor(Process.STEP, new ParameterMessage("controlComposer/triggerDescriptions/step"), new StringValueDescriptor()),
  
  
  
  1.10      +7 -4      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Form.java
  
  Index: Form.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Form.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Form.java	8 Jun 2004 09:04:05 -0000	1.9
  +++ Form.java	15 Jun 2004 16:34:20 -0000	1.10
  @@ -56,6 +56,10 @@
               });
   
       public Result process(Map parameter, Context context) throws Exception {
  +    	Object formResult = context.getStore(Store.FORM).get(FormHandler.RESULT);
  +    	if ( formResult instanceof Result ) {
  +    		return (Result)formResult;  
  +    	}
       	URI actionUri = (URI)parameter.get(ACTION);
       	Locale locale = ((LocaleValue)parameter.get(LOCALE)).getLocale();
           List informations = context.getInformations();
  @@ -122,7 +126,6 @@
                                   new ParameterDescriptor(TRIGGER, new ParameterMessage("form/trigger"), new URIValueDescriptor()),
                                   new ParameterDescriptor(TRIGGER_CONTAINER, new ParameterMessage("form/triggerContainer"),  new URIValueDescriptor(), NullValue.NULL),
                                   new ParameterDescriptor(Trigger.ACTION, new ParameterMessage("trigger/action"), new URIValueDescriptor(), NullValue.NULL),
  -            					new ParameterDescriptor(Trigger.BOOKMARK, new ParameterMessage("trigger/bookmark"), new URIValueDescriptor(), NullValue.NULL),
   	        					new ParameterDescriptor(Trigger.VALIDATE, new ParameterMessage("trigger/validate"), new BooleanValueDescriptor(), BooleanValue.TRUE),
                                   new ParameterDescriptor(Process.STEP, new ParameterMessage("trigger/step"),  new ResourceValueDescriptor(), NullValue.NULL)
                               })));
  
  
  
  1.13      +8 -3      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java
  
  Index: FormHandler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/FormHandler.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- FormHandler.java	10 Jun 2004 16:14:12 -0000	1.12
  +++ FormHandler.java	15 Jun 2004 16:34:20 -0000	1.13
  @@ -26,6 +26,8 @@
    */
   
   public class FormHandler implements Processor {
  +	public final static String RESULT = "result";
  +
   	private final static String INSTRUCTION_IDENTIFIER = "instruction:";
   	
   	private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[0];
  @@ -59,7 +61,6 @@
   		boolean wizard = Boolean.valueOf(tokenizer.nextToken()).booleanValue();
   		String lastStep = tokenizer.nextToken();
   		String targetStep = tokenizer.nextToken();
  -		URI bookmarkUri = new URIValue(tokenizer.nextToken());
   		String domain = tokenizer.nextToken();
   		List involvedParamters = new ArrayList();
   		while ( tokenizer.hasMoreTokens() ) {
  @@ -101,7 +102,11 @@
       		}
       	}
       	// 4. Launch target step if validation is successfull
  -		Processor bookmark = ProcessorManager.getInstance().getProcessor(bookmarkUri);
  +		Processor formProcess = ProcessorManager.getInstance().getProcessor(new URIValue(domain));
  +        map.remove(RESULT);
  +        Result formResult = formProcess.process(parameter,  context);
  +        map.put(RESULT, formResult);
  +		Processor bookmark = ProcessorManager.getInstance().getProcessor(context.getBookmark());
           return bookmark.process(parameter,  context);
       }
   
  
  
  
  1.11      +5 -12     jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java
  
  Index: Trigger.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/form/Trigger.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Trigger.java	10 Jun 2004 16:14:12 -0000	1.10
  +++ Trigger.java	15 Jun 2004 16:34:20 -0000	1.11
  @@ -31,8 +31,7 @@
       public final static String ACTION = "action";
       public final static String VALIDATE = "validate";
       public final static String WIZARD = "wizard";
  -	public final static String BOOKMARK = "bookmark";
  -	public final static String INVOLVED_PARAMETERS = "involved-parameters";
  +	public final static String INVOLVED_PARAMETERS = "involvedParameters";
   	public final char SEPARATOR = ';';
   	
       private ParameterDescriptor[] parameterDescriptors;
  @@ -42,17 +41,13 @@
       }
   
       public Result process(Map parameter, Context context) throws Exception {
  -    	Value bookmark = (Value)parameter.get(BOOKMARK);
  -    	if ( bookmark instanceof NullValue ) {
  -    		bookmark = context.getBookmark();
  -    	}
       	StringValue []involvedParameters = (StringValue[])((ArrayValue)parameter.get(INVOLVED_PARAMETERS)).getArray();
       	String targetStep = parameter.get(Process.STEP).toString();
       	BooleanValue validate = (BooleanValue)parameter.get(VALIDATE);
       	BooleanValue wizard = (BooleanValue)parameter.get(WIZARD);
       	URI actionUri = (URI)parameter.get(ACTION);
   		StringBuffer buffer = new StringBuffer(128);
  -		buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(wizard).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(bookmark).append(SEPARATOR).append(context.getProcess());
  +		buffer.append(actionUri).append(SEPARATOR).append(validate).append(SEPARATOR).append(wizard).append(SEPARATOR).append(context.getStep()).append(SEPARATOR).append(targetStep).append(SEPARATOR).append(context.getProcess());
       	if ( validate.booleanValue() ) {
       		for ( int i = 0; i < involvedParameters.length; i++ ) {
       			buffer.append(SEPARATOR).append(involvedParameters[i]);
  @@ -66,7 +61,7 @@
       public void configure(StreamableValue config) throws ConfigurationException {
           super.configure(config);
           ParameterDescriptor[] parentParameterDescriptors = super.getParameterDescriptors();
  -        parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 5];
  +        parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length + 4];
           int counter = 0;
           for ( int i = 0; i < parentParameterDescriptors.length; i++ ) {
               if (!parentParameterDescriptors[i].getName().equals(FRAGMENT)) {
  @@ -81,10 +76,8 @@
           parameterDescriptors[parentParameterDescriptors.length + 1] =
               new ParameterDescriptor(VALIDATE, new ParameterMessage("trigger/validate"), new BooleanValueDescriptor(), BooleanValue.TRUE);
           parameterDescriptors[parentParameterDescriptors.length + 2] =
  -            new ParameterDescriptor(BOOKMARK, new ParameterMessage("trigger/bookmark"), new URIValueDescriptor(), NullValue.NULL );
  -        parameterDescriptors[parentParameterDescriptors.length + 3] =
               new ParameterDescriptor(INVOLVED_PARAMETERS, new ParameterMessage("trigger/involvedParameters"), new ArrayValueDescriptor(new StringValueDescriptor()));
  -        parameterDescriptors[parentParameterDescriptors.length + 4] =
  +        parameterDescriptors[parentParameterDescriptors.length + 3] =
               new ParameterDescriptor(WIZARD, new ParameterMessage("trigger/wizard"), new BooleanValueDescriptor(), BooleanValue.FALSE);
       }
   
  
  
  
  1.7       +10 -0     jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java
  
  Index: Connector.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/Connector.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Connector.java	10 Jun 2004 16:14:12 -0000	1.6
  +++ Connector.java	15 Jun 2004 16:34:20 -0000	1.7
  @@ -17,6 +17,16 @@
   public interface Connector {
   	public Credentials login(String user, String password) throws IOException;
   		
  +	public URI createUser(String user, String password, Credentials credentials) throws UserExistsException, IOException;
  +	
  +	public void deleteUser(URI uri, Credentials credentials) throws IOException;
  +	
  +	public void addRole(URI user, URI role, Credentials credentials) throws UserExistsException, IOException;
  +	
  +	public void removeRole(URI user, URI role, Credentials credentials) throws UserExistsException, IOException;
  +	
  +	public void changePassword(URI uri, String oldPassword, String newPassword, Credentials credentials) throws IOException;
  +	
   	public Value getResource(URI uri, Credentials credentials) throws IOException;
   
       public ArrayValue getProperties(URI uri, Credentials credentials) throws IOException;
  
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/UserExistsException.java
  
  Index: UserExistsException.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/UserExistsException.java,v 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * 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.apache.slide.projector.connector;
  
  import org.apache.slide.projector.ProcessException;
  import org.apache.slide.projector.i18n.ErrorMessage;
  
  /**
   * The UserExistsException class
   * 
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   */
  public class UserExistsException extends ProcessException {
      public UserExistsException(ErrorMessage errorMessage, Throwable cause) {
          super(errorMessage, cause);
      }
  
      public UserExistsException(ErrorMessage errorMessage) {
          super(errorMessage);
      }
  }
  
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/CreateUser.java
  
  Index: CreateUser.java
  ===================================================================
  package org.apache.slide.projector.processor.security;
  
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.connector.UserExistsException;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.DefaultMessage;
  import org.apache.slide.projector.i18n.ErrorMessage;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.Information;
  import org.apache.slide.projector.*;
  
  import java.util.Map;
  
  /**
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   * @version $Revision: 1.1 $
   */
  
  public class CreateUser implements Processor {
      private final static String USERNAME = "username";
      private final static String PASSWORD = "password";
      private final static String RETYPE_PASSWORD = "retypePassword";
  
      private final static String VALID = "valid";
      private final static String INVALID = "invalid";
  
      public Result process(Map parameter, Context context) throws Exception {
          String username = parameter.get(USERNAME).toString();
          String retypedPassword = parameter.get(RETYPE_PASSWORD).toString();
          String password = parameter.get(PASSWORD).toString();
          String state = VALID;
          // Check spelling
          if ( !password.equals(retypedPassword) ) {
              context.addInformation(new Information(Information.ERROR, new ErrorMessage("register/passwordsNotIdentical"), new String[] { PASSWORD, RETYPE_PASSWORD }));
              state = INVALID;
          } else {
              try {
              	ConnectorFactory.getConnector().createUser(username, password, context.getCredentials());	
              } catch ( UserExistsException exception ) {
                  context.addInformation(new Information(Information.ERROR, exception.getErrorMessage(), new String[] { USERNAME }));
                  state = INVALID;
              }
          }
          /*
          if ( password.equals("aaaa") ) {
              context.addInformation(new Information(Information.ERROR, new ErrorMessage("login/invalidPassword"), new String[] { PASSWORD }));
              state = INVALID;
          }
          */
          // Check if user already exists
          return new Result(state);
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return new ParameterDescriptor[] {
              new ParameterDescriptor(USERNAME, new ParameterMessage("create-user/username"), new StringValueDescriptor(1,24)),
              new ParameterDescriptor(PASSWORD, new ParameterMessage("create-user/password"), new StringValueDescriptor(1,24)),
              new ParameterDescriptor(RETYPE_PASSWORD, new ParameterMessage("create-user/retyped-password"), new StringValueDescriptor(1,24)),
          };
      }
  
      public ResultDescriptor getResultDescriptor() {
          return new ResultDescriptor(new StateDescriptor[] {
             new StateDescriptor(VALID, new DefaultMessage("create-user/state/valid")),
             new StateDescriptor(INVALID, new DefaultMessage("create-user/state/invalid"))
          });
      }
  }
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/DeleteUser.java
  
  Index: DeleteUser.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/security/DeleteUser.java,v 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * 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.apache.slide.projector.processor.security;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   */
  public class DeleteUser implements Processor {
      public final static String URI = "uri";
  
      private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[] {
          new ParameterDescriptor(URI, new ParameterMessage("deleteUser/parameter/uri"), new URIValueDescriptor())
      };
      private final static ResultDescriptor resultDescriptor = new ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
      	URI uri = (URI)parameter.get(URI);
      	ConnectorFactory.getConnector().deleteUser(uri, context.getCredentials());
      	return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  1.4       +2 -2      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/CachedContent.java
  
  Index: CachedContent.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/CachedContent.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CachedContent.java	10 Jun 2004 16:14:12 -0000	1.3
  +++ CachedContent.java	15 Jun 2004 16:34:20 -0000	1.4
  @@ -30,7 +30,7 @@
           URI uri = (URI)parameter.get(SimpleProcessor.INPUT);
           String url = "";
           if ( context instanceof HttpContext ) {
  -            url = ((HttpContext)context).getContextPath()+ProcessorManager.getInstance().getURI(this)+"?input="+uri;
  +            url = ((HttpContext)context).getContextPath()+"/"+ProcessorManager.getInstance().getURI(this)+"?input="+uri;
           }
           // check for cached result
           Map resultEntries = new HashMap();
  
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/Bookmark.java
  
  Index: Bookmark.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/core/Bookmark.java,v 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * 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.apache.slide.projector.processor.core;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.value.BooleanValue;
  import org.apache.slide.projector.value.MapValue;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   */
  public class Bookmark implements Processor {
      public final static String BOOKMARK = "bookmark";
  
      private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[] {
          new ParameterDescriptor(BOOKMARK, new ParameterMessage("bookmark/parameter/bookmark"), new URIValueDescriptor())
      };
      private final static ResultDescriptor resultDescriptor = new ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
          URI bookmarkUri = (URI)parameter.get(BOOKMARK);
          context.setBookmark(bookmarkUri);
          return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  
  1.11      +101 -1    jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java
  
  Index: WebdavConnector.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/connector/webdav/WebdavConnector.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- WebdavConnector.java	10 Jun 2004 16:14:12 -0000	1.10
  +++ WebdavConnector.java	15 Jun 2004 16:34:20 -0000	1.11
  @@ -1,6 +1,7 @@
   package org.apache.slide.projector.connector.webdav;
   
   import org.apache.commons.httpclient.Credentials;
  +import org.apache.commons.httpclient.Header;
   import org.apache.commons.httpclient.HttpConnection;
   import org.apache.commons.httpclient.HttpState;
   import org.apache.commons.httpclient.HttpStatus;
  @@ -12,20 +13,30 @@
   import org.apache.slide.projector.URI;
   import org.apache.slide.projector.connector.Connector;
   import org.apache.slide.projector.connector.Subscriber;
  +import org.apache.slide.projector.connector.UserExistsException;
  +import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.value.*;
   import org.apache.webdav.lib.Property;
  +import org.apache.webdav.lib.PropertyName;
  +import org.apache.webdav.lib.methods.MkcolMethod;
   import org.apache.webdav.lib.methods.PropFindMethod;
  +import org.apache.webdav.lib.methods.PropPatchMethod;
   import org.apache.webdav.lib.methods.SearchMethod;
  +import org.jdom.Element;
  +import org.jdom.input.DOMBuilder;
  +import org.jdom.output.XMLOutputter;
   
   import java.io.IOException;
   import java.io.InputStream;
   import java.util.*;
  -import java.util.logging.Level;
   import java.util.logging.Logger;
   
   public class WebdavConnector implements Connector {
       private static Logger logger = Logger.getLogger(WebdavConnector.class.getName());
   
  +    private static final String SLIDE_NAMESPACE = "http://jakarta.apache.org/slide/";
  +    private static final String DAV_NAMESPACE = "DAV:";
  +
       private static WebdavConnector webdavConnector = new WebdavConnector();
       private static WebdavDispatcher dispatcher = new WebdavDispatcher(Constants.NOTIFICATION_HOST, Constants.NOTIFICATION_PORT,
               Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, Constants.REPOSITORY_PROTOCOL, Constants.REPOSITORY_DOMAIN, Constants.POLL_INTERVAL);
  @@ -51,6 +62,47 @@
           return null;
       }
       
  +    public URI createUser(String username, String password, Credentials credentials) throws UserExistsException, IOException {
  +    	Value userExists = getResource(new URIValue(Constants.REPOSITORY_DOMAIN+Constants.USERS_DIR+username), credentials); 
  +    	if ( userExists == NullValue.NULL || userExists != null ) {
  +            throw new UserExistsException(new ErrorMessage("userExists", new String[] { username }));
  +        } else {
  +        	URI userUri = new URIValue(Constants.REPOSITORY_DOMAIN+Constants.USERS_DIR+username);
  +        	MkcolMethod mkcolMethod = new MkcolMethod(userUri.toString());
  +        	mkcolMethod.setDoAuthentication(true);
  +            HttpState httpState = new HttpState();
  +            httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +            int state = mkcolMethod.execute(httpState, new HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, Constants.REPOSITORY_PROTOCOL));
  +            if ( state == HttpStatus.SC_CREATED ) {
  +            	changePassword(userUri, null, password, credentials);
  +				addRole(userUri, new URIValue(Constants.REPOSITORY_DOMAIN+Constants.ROLES_DIR+"root"), credentials);
  +            	return userUri;
  +            }
  +            return null;
  +        }
  +    }
  +    
  +    public void deleteUser(URI uri, Credentials credentials) throws IOException {
  +    	removeResource(uri, credentials);
  +    }
  +    
  +    public void addRole(URI user, URI role, Credentials credentials) throws IOException {
  +		XMLValue roleElement = getPropertyAsXMLValue(role, DAV_NAMESPACE, "group-member-set", credentials);
  +        Element newElement = new Element("href", "DAV:");
  +        newElement.addContent(user.toString());
  +        roleElement.getRootElement().addContent(newElement);
  +        XMLOutputter xout = new XMLOutputter();
  +        String groupMemberSet = xout.outputString(roleElement.getRootElement());
  +		setProperty(role, DAV_NAMESPACE, "group-member-set", groupMemberSet, credentials);    
  +    }
  +    
  +    public void removeRole(URI user, URI role, Credentials credentials) throws IOException {
  +    }
  +    
  +    public void changePassword(URI uri, String oldPassword, String newPassword, Credentials credentials) throws IOException {
  +		setProperty(uri, SLIDE_NAMESPACE, "password", newPassword, credentials);
  +    }
  +
       public Value getResource(URI uri, Credentials credentials) throws IOException {
           String url = uri.toString();
           GetMethod getMethod = new GetMethod(url);
  @@ -64,8 +116,56 @@
           InputStream stream = getMethod.getResponseBodyAsStream();
           String contentType = getMethod.getResponseHeader("Content-type").getValue();
           String characterEncoding = getMethod.getResponseCharSet();
  +        Header contentLengthHeader = getMethod.getResponseHeader("Content-length");
  +        if ( contentLengthHeader == null ) return NullValue.NULL;
           int contentLength = Integer.parseInt(getMethod.getResponseHeader("Content-length").getValue());
           return new InputStreamValue(stream, contentType, characterEncoding, contentLength, true);
  +    }
  +
  +    public void setProperty(URI uri, String namespace, String name, String value, Credentials credentials) throws IOException {
  +        PropPatchMethod proppatchMethod = new PropPatchMethod(uri.toString());
  +        proppatchMethod.setDoAuthentication(true);
  +        HttpState httpState = new HttpState();
  +        httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +        proppatchMethod.addPropertyToSet(name, value, "S", namespace);
  +        int state = proppatchMethod.execute(httpState, new HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, Constants.REPOSITORY_PROTOCOL));
  +        if ( state != HttpStatus.SC_MULTI_STATUS ) {
  +        	throw new IOException("Received status code "+state+" when doing PROPPATH on URI="+uri);
  +        }
  +    }
  +
  +    public Value getPropertyAsStringValue(URI uri, String namespace, String name, Credentials credentials) throws IOException {
  +		Property property = getProperty(uri, namespace, name, credentials);
  +		if ( property == null ) return null;
  +        return new StringValue(property.getPropertyAsString());
  +    }
  +
  +    public XMLValue getPropertyAsXMLValue(URI uri, String namespace, String name, Credentials credentials) throws IOException {
  +		Property property = getProperty(uri, namespace, name, credentials);
  +		if ( property == null ) return null;
  +		DOMBuilder builder = new DOMBuilder();
  +        Element element = builder.build(property.getElement());
  +		return new ElementValue(element);
  +    }
  +
  +	private Property getProperty(URI uri, String namespace, String name, Credentials credentials) throws IOException {
  +		String url = uri.toString();
  +        PropFindMethod propfindMethod = new PropFindMethod(url, 0);
  +        propfindMethod.setDoAuthentication(true);
  +        HttpState httpState = new HttpState();
  +        httpState.setCredentials(null, Constants.REPOSITORY_HOST, credentials);
  +        Vector props = new Vector();
  +        props.add(new PropertyName(namespace, name));
  +       	propfindMethod.setPropertyNames(props.elements());
  +        int state = propfindMethod.execute(httpState, new HttpConnection(Constants.REPOSITORY_HOST, Constants.REPOSITORY_PORT, Constants.REPOSITORY_PROTOCOL));
  +        if ( state != HttpStatus.SC_MULTI_STATUS ) {
  +            throw new IOException("Received status code "+state+" when doing PROPFIND on URI="+url);
  +        }
  +        Enumeration propertyEnumeration = propfindMethod.getResponseProperties(url);
  +        if ( propertyEnumeration.hasMoreElements() ) {
  +        	return (Property)propertyEnumeration.nextElement();
  +        }
  +        return null;
       }
   
       public ArrayValue getProperties(URI uri, Credentials credentials) throws IOException {
  
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Get.java
  
  Index: Get.java
  ===================================================================
  package org.apache.slide.projector.processor.access;
  
  import org.apache.slide.projector.Constants;
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.URI;
  import org.apache.slide.projector.connector.ConnectorFactory;
  import org.apache.slide.projector.descriptor.ParameterDescriptor;
  import org.apache.slide.projector.descriptor.ResultEntryDescriptor;
  import org.apache.slide.projector.descriptor.URIValueDescriptor;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.i18n.DefaultMessage;
  import org.apache.slide.projector.processor.SimpleProcessor;
  import org.apache.slide.projector.value.URIValue;
  import org.apache.slide.projector.value.Value;
  
  public class Get extends SimpleProcessor {
      public Value process(Value input, Context context) throws Exception {
          URI uri = new URIValue(Constants.REPOSITORY_DOMAIN+input.toString());
          return ConnectorFactory.getConnector().getResource(uri, context.getCredentials());
      }
  
      public ParameterDescriptor getParameterDescriptor() {
          return new ParameterDescriptor(INPUT, new ParameterMessage("simpleProcessor/parameter/input"), new URIValueDescriptor());
      }
  
      public ResultEntryDescriptor getResultEntryDescriptor() {
          return new ResultEntryDescriptor(OUTPUT, new DefaultMessage("simpleProcessor/result/output"), "*", true);
      }
  }
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Remove.java
  
  Index: Remove.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Remove.java,v 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * 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.apache.slide.projector.processor.access;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.Store;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.util.StoreHelper;
  import org.apache.slide.projector.value.StringValue;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   */
  public class Remove implements Processor {
      public final static String STORE = "store";
      public final static String KEY = "key";
  
      private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[] {
          new ParameterDescriptor(STORE, new ParameterMessage("put/parameter/store"), new StringValueDescriptor(Store.stores), new StringValue(Store.stores[Store.REPOSITORY])),
          new ParameterDescriptor(KEY, new ParameterMessage("put/parameter/key"), new StringValueDescriptor()),
      };
      private final static ResultDescriptor resultDescriptor = new ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
      	String storeName = parameter.get(STORE).toString();
      	String key = parameter.get(KEY).toString();
      	Store store = context.getStore(StoreHelper.getStoreByName(storeName));
      	store.dispose(key);
      	return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  1.1                  jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Put.java
  
  Index: Put.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/access/Put.java,v 1.1 2004/06/15 16:34:20 dflorey Exp $
   * $Revision: 1.1 $
   * $Date: 2004/06/15 16:34:20 $
   *
   * ====================================================================
   *
   * Copyright 2004 The Apache Software Foundation 
   *
   * 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.apache.slide.projector.processor.access;
  
  import org.apache.slide.projector.Context;
  import org.apache.slide.projector.Processor;
  import org.apache.slide.projector.Result;
  import org.apache.slide.projector.Store;
  import org.apache.slide.projector.descriptor.*;
  import org.apache.slide.projector.i18n.ParameterMessage;
  import org.apache.slide.projector.util.StoreHelper;
  import org.apache.slide.projector.value.NullValue;
  import org.apache.slide.projector.value.NumberValue;
  import org.apache.slide.projector.value.Value;
  
  import java.util.Map;
  
  /**
   * The Event class
   * 
   * @author <a href="mailto:dflorey@c1-fse.de">Daniel Florey</a>
   */
  public class Put implements Processor {
      public final static String STORE = "store";
      public final static String KEY = "key";
      public final static String VALUE = "value";
      public final static String TIMEOUT = "timeout";
  
      private final static ParameterDescriptor[] parameterDescriptors = new ParameterDescriptor[] {
          new ParameterDescriptor(STORE, new ParameterMessage("put/parameter/store"), new StringValueDescriptor(Store.stores)),
          new ParameterDescriptor(KEY, new ParameterMessage("put/parameter/key"), new StringValueDescriptor()),
          new ParameterDescriptor(VALUE, new ParameterMessage("put/parameter/value"), new ResourceValueDescriptor()),
          new ParameterDescriptor(TIMEOUT, new ParameterMessage("put/parameter/timeout"), new NumberValueDescriptor(), NullValue.NULL)
      };
      private final static ResultDescriptor resultDescriptor = new ResultDescriptor(new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR });
  
      public Result process(Map parameter, Context context) throws Exception {
      	String storeName = parameter.get(STORE).toString();
      	String key = parameter.get(KEY).toString();
      	Value value = (Value)parameter.get(VALUE);
      	Value timeoutValue = (Value)parameter.get(TIMEOUT);
      	Store store = context.getStore(StoreHelper.getStoreByName(storeName));
      	if ( timeoutValue == NullValue.NULL ) {
      		store.put(key, value);
      	} else {
      		long timeout = ((NumberValue)timeoutValue).getNumber().longValue();
      		store.put(key, value, timeout);
      	}
          return Result.OK;
      }
  
      public ParameterDescriptor[] getParameterDescriptors() {
          return parameterDescriptors;
      }
  
      public ResultDescriptor getResultDescriptor() {
          return resultDescriptor;
      }
  }
  
  
  
  1.3       +6 -2      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/Process.java
  
  Index: Process.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/Process.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Process.java	8 Jun 2004 14:43:16 -0000	1.2
  +++ Process.java	15 Jun 2004 16:34:21 -0000	1.3
  @@ -147,7 +147,11 @@
   				checkRoutings(step, processor);
   				try {
   					stepResult = processor.process(processorParameters, context);
  -					saveResults(step, stepResult, stepStore, result, getResultDescriptor().getResultEntryDescriptors(), context);
  +					try {
  +						saveResults(step, stepResult, stepStore, result, getResultDescriptor().getResultEntryDescriptors(), context);
  +					} catch ( ProcessException e ) {
  +						throw new ProcessException(new ErrorMessage("saveFailed", new Object[] { step.getProcessorURI(), nextStep }), e );
  +					}
   					nextStep = routeState(step, stepResult.getState());
   				} catch (Exception e) {
   					nextStep = routeException(step, e);
  @@ -270,7 +274,7 @@
   		return parameters;
   	}
   
  -	public static void saveResults(Step step, Result stepResult, Store stepStore, Result result, ResultEntryDescriptor[] resultEntryDescriptors, Context context) {
  +	public static void saveResults(Step step, Result stepResult, Store stepStore, Result result, ResultEntryDescriptor[] resultEntryDescriptors, Context context) throws ProcessException {
   		// save results by using result configuration
   		for (Iterator i = step.getResultConfigurations().entrySet().iterator(); i.hasNext();) {
   			Map.Entry entry = (Map.Entry)i.next();
  
  
  
  1.2       +10 -6     jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/ResultConfiguration.java
  
  Index: ResultConfiguration.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/process/ResultConfiguration.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ResultConfiguration.java	8 Jun 2004 09:04:05 -0000	1.1
  +++ ResultConfiguration.java	15 Jun 2004 16:34:21 -0000	1.2
  @@ -5,6 +5,7 @@
   import org.apache.slide.projector.Result;
   import org.apache.slide.projector.Store;
   import org.apache.slide.projector.descriptor.ResultEntryDescriptor;
  +import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.util.StoreHelper;
   import org.apache.slide.projector.value.MapValue;
   import org.apache.slide.projector.value.StreamableValue;
  @@ -57,8 +58,11 @@
           return name;
       }
   
  -    protected void storeValue(Value value, Store stepStore, Result result, ResultEntryDescriptor[] resultEntryDescriptors, Context context) {
  +    protected void storeValue(Value value, Store stepStore, Result result, ResultEntryDescriptor[] resultEntryDescriptors, Context context) throws ProcessException {
       	// FIXME: Throw process exception instead of severe logging
  +    	if ( value == null ) {
  +    		throw new ProcessException(new ErrorMessage("valueToStoreNotFound"));
  +    	}
       	if (presentable ) {
               if ( value instanceof StreamableValue ) {
                   if ( context instanceof HttpContext ) {
  @@ -67,7 +71,7 @@
                       logger.log(Level.INFO, "Result can only be shown in http-context!");
                   }
               } else {
  -                logger.log(Level.SEVERE, "Only resources of type StreamableResource can be presented!");
  +        		throw new ProcessException(new ErrorMessage("unpresentableValue"));
               }
           }
           Store resultStore = stepStore;
  @@ -82,19 +86,19 @@
           				resultDefined = true;
           				break;
           			} else {
  -                        logger.log(Level.SEVERE, "Storing result with key '"+key+"' failed, because content type of generated result is '"+value.getContentType()+"' and does not match defined content type '"+resultEntryDescriptors[i].getContentType()+"'");
  +                		throw new ProcessException(new ErrorMessage("contentTypeMismatch", new String[] { key, value.getContentType(), resultEntryDescriptors[i].getContentType()}));
           			}
           		}
           	}
           	if ( !resultDefined ) {
  -                logger.log(Level.SEVERE, "Storing result failed, because result with key '"+key+"' is not defined in processor description!");
  +        		throw new ProcessException(new ErrorMessage("undefinedResultKey", new String[] { key }));
           	}
           } else {
               if ( store != Store.NONE ) {
               	resultStore = context.getStore(store);
               }
               if ( resultStore == null ) {
  -                logger.log(Level.SEVERE, "Storing result with key '"+key+"' failed, because store '"+Store.stores[store]+"' in not available in context '"+context+"'");
  +        		throw new ProcessException(new ErrorMessage("storeNotAvailable", new String[] { key, Store.stores[store] }));
               } else {
                   try {
                       String evaluatedKey = Process.evaluateKey(key, context);
  @@ -119,7 +123,7 @@
                       	}
                       }
                   } catch ( IOException e ) {
  -                    logger.log(Level.SEVERE, "Storing result with key '"+key+"' failed!", e);
  +            		throw new ProcessException(new ErrorMessage("storingResultFailed"), e);
                   }
               }
           }
  
  
  
  1.3       +18 -9     jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableMapRenderer.java
  
  Index: TableMapRenderer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/table/TableMapRenderer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TableMapRenderer.java	1 Jun 2004 07:49:58 -0000	1.2
  +++ TableMapRenderer.java	15 Jun 2004 16:34:21 -0000	1.3
  @@ -12,6 +12,7 @@
   import org.apache.slide.projector.i18n.ErrorMessage;
   import org.apache.slide.projector.i18n.ParameterMessage;
   
  +import java.util.Iterator;
   import java.util.Map;
   import java.util.HashMap;
   
  @@ -46,7 +47,7 @@
       }
   
       public void configure(StreamableValue config) throws ConfigurationException {
  -        super.configure(config);
  +        super.configure(config); 
           ParameterDescriptor []parentParameterDescriptors = super.getParameterDescriptors();
           // remove fragment parameter
           parameterDescriptors = new ParameterDescriptor[parentParameterDescriptors.length+3];
  @@ -88,8 +89,6 @@
           if ( idResource == null) {
               tableMap = new HashMap();
               MapValue tableState = new MapValue(tableMap);
  -            tableMap.put(TableHandler.CURRENT_POSITION, offsetResource);
  -            tableMap.put(ITEMS_PER_PAGE, itemsPerPageResource);
               store.put(id, tableState);
           } else {
               tableMap = idResource.getMap();
  @@ -98,6 +97,8 @@
               NumberValue itemsPerPage = (NumberValue)idResource.getMap().get(ITEMS_PER_PAGE);
               if ( itemsPerPage != null ) itemsPerPageResource = itemsPerPage;
           }
  +        tableMap.put(TableHandler.CURRENT_POSITION, offsetResource);
  +        tableMap.put(ITEMS_PER_PAGE, itemsPerPageResource);
           int offset = offsetResource.getNumber().intValue();
           int length = itemsPerPageResource.getNumber().intValue();
           parameter.remove(OFFSET);
  @@ -115,16 +116,24 @@
           } else {
               if ( headerTemplate != null ) headerTemplate.evaluate(buffer, parameter);
               for ( int i = 0; i < length; i++ ) {
  -                Map repeatedParameter = ((MapValue)input.getArray()[i+offset]).getMap();
  -                repeatedParameter.putAll(parameter);
  +            	// Enable the use of input parameters to provide default values for optional row parameters
  +            	Map rowParameter = new HashMap();
  +                rowParameter.putAll(parameter);
  +            	Map repeatedParameter = ((MapValue)input.getArray()[i+offset]).getMap();
  +                for ( Iterator j = repeatedParameter.entrySet().iterator(); j.hasNext(); ) {
  +                	Map.Entry entry = (Map.Entry)j.next();
  +                	if ( entry.getValue() != NullValue.NULL ) {
  +                		rowParameter.put(entry.getKey(), entry.getValue());
  +                	}
  +                }
                   if ( i == 0 && firstTemplate != null ) {
  -                    firstTemplate.evaluate(buffer, repeatedParameter);
  +                    firstTemplate.evaluate(buffer, rowParameter);
                   } else if ( i == length -1 && lastTemplate != null ) {
  -                    lastTemplate.evaluate(buffer, repeatedParameter);
  +                    lastTemplate.evaluate(buffer, rowParameter);
                   } else if ( evenTemplate != null && i%2 == 0 ) {
  -                    evenTemplate.evaluate(buffer, repeatedParameter);
  +                    evenTemplate.evaluate(buffer, rowParameter);
                   } else {
  -                    defaultTemplate.evaluate(buffer, repeatedParameter);
  +                    defaultTemplate.evaluate(buffer, rowParameter);
                   }
               }
               if ( footerTemplate != null ) footerTemplate.evaluate(buffer, parameter);
  
  
  
  1.13      +4 -1      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/Constants.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Constants.java	10 Jun 2004 16:14:12 -0000	1.12
  +++ Constants.java	15 Jun 2004 16:34:21 -0000	1.13
  @@ -35,7 +35,7 @@
       public final static int UDP = 0;
       public final static int TCP = 1;
       public final static int OFF = 2;
  -	
  +
   	public final static int NOTIFICATION_METHOD = UDP;
       public final static String NOTIFICATION_HOST = "192.168.105.64";
       public final static int NOTIFICATION_PORT = 4445;
  @@ -45,12 +45,15 @@
       public final static int NOTIFICATION_DELAY = 0;
   
       public final static String DOMAIN = "/files/";
  +
       public final static String PROJECTOR_DIR = DOMAIN+"projector/";
       public final static String APPLICATIONS_DIR = PROJECTOR_DIR + "applications/";
       public final static String WORK_DIR = PROJECTOR_DIR + "work/";
   	// FIXME: Use Classpath from applications
       public final static String CLASSES_DIR = PROJECTOR_DIR + "classes/";
       public final static String PROCESS_STORAGE_PREFIX = WORK_DIR + "process/";
  +	public static final String USERS_DIR = "/users/";
  +	public static final String ROLES_DIR = "/roles/";
   
       public static final URI DEFAULT_FORM_HANDLER = new URIValue("formHandler");
   }
  
  
  
  1.4       +3 -0      jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateMapRenderer.java
  
  Index: TemplateMapRenderer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/TemplateMapRenderer.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TemplateMapRenderer.java	1 Jun 2004 07:49:55 -0000	1.3
  +++ TemplateMapRenderer.java	15 Jun 2004 16:34:21 -0000	1.4
  @@ -8,6 +8,7 @@
   import org.apache.slide.projector.i18n.ParameterMessage;
   import org.apache.slide.projector.value.ArrayValue;
   import org.apache.slide.projector.value.MapValue;
  +import org.apache.slide.projector.value.NullValue;
   import org.apache.slide.projector.value.StreamableValue;
   import org.apache.slide.projector.value.StringValue;
   
  @@ -35,6 +36,7 @@
           List parameterDescriptorList = new ArrayList();
           for ( Iterator i = parameterDescriptions.iterator(); i.hasNext(); ) {
               ParameterDescriptor entryDescriptor = (ParameterDescriptor)i.next();
  +            // add all map parameters to optional parameters 
               if ( entryDescriptor.getName() == FRAGMENT ) {
                   parameterDescriptorList.add(entryDescriptor);
               } else {
  @@ -44,6 +46,7 @@
                           mapValueDescriptor.addEntryDescriptor(new ParameterDescriptor(entryDescriptor.getName(), new ParameterMessage("templateMapRenderer/mapEntry"), entryDescriptor.getValueDescriptor()));
                       } else {
                           mapValueDescriptor.addEntryDescriptor(new ParameterDescriptor(entryDescriptor.getName(), new ParameterMessage("templateMapRenderer/mapEntry"), entryDescriptor.getValueDescriptor(), entryDescriptor.getDefaultValue() ));
  +                        parameterDescriptorList.add(new ParameterDescriptor(entryDescriptor.getName(), entryDescriptor.getDescription(), entryDescriptor.getValueDescriptor(), NullValue.NULL));
                       }
                   } else {
                       parameterDescriptorList.add(entryDescriptor);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org