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