You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by rm...@apache.org on 2011/01/25 11:04:37 UTC
svn commit: r1063200 - in /incubator/isis/trunk/viewer/scimpi:
dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/
dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/
dispatcher/src/main/java/org/apache/isis/viewer...
Author: rmatthews
Date: Tue Jan 25 10:04:36 2011
New Revision: 1063200
URL: http://svn.apache.org/viewvc?rev=1063200&view=rev
Log:
Imrpoved error handling and hiding for users
Modified:
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/UserlessSession.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugAction.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Diagnostics.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/ThrowException.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/GetField.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/TableCell.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/FieldFactory.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/Selector.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/form/InputForm.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java
incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/Dispatcher.java Tue Jan 25 10:04:36 2011
@@ -20,6 +20,7 @@
package org.apache.isis.viewer.scimpi.dispatcher;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -32,13 +33,8 @@ import java.util.Map;
import java.util.Stack;
import java.util.TreeSet;
-import org.apache.log4j.Logger;
-import org.dom4j.Document;
-import org.dom4j.DocumentException;
-import org.dom4j.Element;
-import org.dom4j.io.SAXReader;
-
import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.core.commons.debug.DebugString;
import org.apache.isis.core.commons.exceptions.IsisException;
import org.apache.isis.core.commons.factory.InstanceUtil;
@@ -63,8 +59,14 @@ import org.apache.isis.viewer.scimpi.dis
import org.apache.isis.viewer.scimpi.dispatcher.processor.HtmlFileParser;
import org.apache.isis.viewer.scimpi.dispatcher.processor.ProcessorLookup;
import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.TagProcessingException;
import org.apache.isis.viewer.scimpi.dispatcher.util.MethodsUtils;
import org.apache.isis.viewer.scimpi.dispatcher.view.Snippet;
+import org.apache.log4j.Logger;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
public class Dispatcher {
@@ -82,12 +84,11 @@ public class Dispatcher {
private HtmlFileParser parser = new HtmlFileParser(processors);
public void process(RequestContext context, String servletPath) {
-
+ LOG.info("processing request " + servletPath);
try {
AuthenticationSession session = UserManager.startRequest(context);
LOG.debug("exsiting session: " + session);
- LOG.info("processing request " + servletPath);
-
+
IsisContext.getPersistenceSession().getTransactionManager().startTransaction();
context.setRequestPath(servletPath);
context.startRequest();
@@ -107,14 +108,17 @@ public class Dispatcher {
if (transactionManager.getTransaction().getState().canCommit()) {
IsisContext.getPersistenceSession().getTransactionManager().endTransaction();
}
+
+ context.endRequest();
+ UserManager.endRequest(context.getSession());
+
} catch (Throwable e) {
- LOG.error(e.getMessage(), e);
+ LOG.error(e.getMessage(), e);
DebugString error = new DebugString();
-
List<String> messages = IsisContext.getMessageBroker().getMessages();
for (String message : messages) {
- context.getWriter().append("<div class=\"message\">message: " + message + "</div>");
+ context.getWriter().append("<div class=\"messaEge\">message: " + message + "</div>");
error.appendln("message", message);
}
messages = IsisContext.getMessageBroker().getWarnings();
@@ -124,6 +128,7 @@ public class Dispatcher {
}
generateErrorPage(e, context, error);
+
PersistenceSession checkSession = IsisContext.getPersistenceSession();
IsisTransactionManager transactionManager = checkSession.getTransactionManager();
if (transactionManager.getTransaction().getState().canAbort()) {
@@ -133,20 +138,88 @@ public class Dispatcher {
String message = "failed while processing " + servletPath;
LOG.error(message + "\n" + error + "\n" + message, e);
- } finally {
- try {
- context.endRequest();
- } catch (Exception e) {
- LOG.error("endRequest call failed", e);
- }
+
try {
UserManager.endRequest(context.getSession());
- } catch (Exception e) {
- LOG.error("endRequest call failed", e);
+ } catch (Exception e1) {
+ LOG.error("endRequest call failed", e1);
+ }
+
+ Throwable ex;
+ if (e instanceof TagProcessingException) {
+ ex = e.getCause();
+ } else {
+ ex = e;
+ }
+ if (ex instanceof ForbiddenException) {
+ context.raiseError(403);
+ } else if (ex instanceof ScimpiNotFoundException) {
+ context.raiseError(404);
+ } else {
+ context.raiseError(500);
}
}
}
+
+ int nextId = 1000;
+
+ private void generateErrorPage(Throwable exception, RequestContext requestContext, DebugString error) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ writeErrorContent(requestContext, exception, error, new PrintWriter(out), false);
+
+ PrintWriter writer;
+ try {
+ String ref = Long.toString(System.currentTimeMillis(), 36).toUpperCase();
+ requestContext.addVariable("_error-ref", ref, Scope.INTERACTION);
+ String directory = IsisContext.getConfiguration().getString(ConfigurationConstants.ROOT + "scimpi.error-snapshots", ".");
+ writer = new PrintWriter(new File(directory, "error_" + ref + ".html"));
+ writeErrorContent(requestContext, exception, error, writer, true);
+ } catch (FileNotFoundException e) {
+ LOG.error("Failed to archive error page", e);
+ }
+
+ String replace = "\\$\\{";
+ String withReplacement = "\\${";
+ requestContext.addVariable("_error-message", exception.getMessage().replaceAll(replace, withReplacement), Scope.INTERACTION);
+ requestContext.addVariable("_error-details", out.toString().replaceAll(replace, withReplacement), Scope.INTERACTION);
+ requestContext.clearTransientVariables();
+ }
+
+
+ public void writeErrorContent(
+ RequestContext requestContext,
+ Throwable exception,
+ DebugString error,
+ PrintWriter writer,
+ boolean includeHeader) {
+ DebugView errorView = new DebugView(writer, error);
+ if (includeHeader) {
+ errorView.header();
+ }
+ errorView.startTable();
+
+ errorView.divider("User");
+ errorView.appendRow("Session", requestContext.getSession());
+ errorView.appendRow("Name", requestContext.getSession().getUserName());
+ errorView.appendRow("Roles", requestContext.getSession().getRoles());
+
+ try {
+ errorView.exception(exception);
+ requestContext.append(errorView);
+ } catch (RuntimeException e) {
+ errorView.exception(e);
+ }
+ errorView.divider("Processing");
+ errorView.appendDebugTrace(requestContext.getDebugTrace());
+ errorView.endTable();
+ if (includeHeader) {
+ errorView.footer();
+ }
+ writer.close();
+ }
+
+
public void addParameter(String name, String value) {
parameters.put(name, value);
}
@@ -313,29 +386,6 @@ public class Dispatcher {
*/
}
- private void generateErrorPage(Throwable exception, RequestContext requestContext, DebugString error) {
- requestContext.setStatus(500);
- requestContext.setContentType("text/html");
-
- PrintWriter writer = requestContext.getWriter();
- DebugView errorView = new DebugView(writer, error);
- errorView.header();
- errorView.startTable();
- try {
- errorView.exception(exception);
- requestContext.append(errorView);
- } catch (RuntimeException e) {
- errorView.exception(e);
- }
- errorView.divider("Processing");
- errorView.appendDebugTrace(requestContext.getDebugTrace());
- errorView.endTable();
- errorView.footer();
- writer.close();
-
- requestContext.clearTransientVariables();
- }
-
public void init(String dir) {
addAction(new ActionAction());
addAction(new DebugAction(this));
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/ForbiddenException.java Tue Jan 25 10:04:36 2011
@@ -20,6 +20,9 @@
package org.apache.isis.viewer.scimpi.dispatcher;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.runtime.context.IsisContext;
+
/**
* Indicates that request could not complete as it could not access (for security reasons) some of the content.
*/
@@ -29,7 +32,7 @@ public class ForbiddenException extends
public ForbiddenException() {}
public ForbiddenException(String message) {
- super(message);
+ super(appendUsers(message));
}
public ForbiddenException(Throwable cause) {
@@ -37,7 +40,12 @@ public class ForbiddenException extends
}
public ForbiddenException(String message, Throwable cause) {
- super(message, cause);
+ super(appendUsers(message), cause);
+ }
+
+ private static String appendUsers(String message) {
+ AuthenticationSession session = IsisContext.getAuthenticationSession();
+ return message + " " + session.getUserName() + " " + session.getRoles();
}
}
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/UserlessSession.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/UserlessSession.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/UserlessSession.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/UserlessSession.java Tue Jan 25 10:04:36 2011
@@ -21,23 +21,22 @@
package org.apache.isis.viewer.scimpi.dispatcher;
import java.io.IOException;
+import java.util.Arrays;
import org.apache.isis.core.commons.authentication.AuthenticationSessionAbstract;
import org.apache.isis.core.commons.encoding.DataInputExtended;
-public class UserlessSession extends AuthenticationSessionAbstract {
- private static final long serialVersionUID = 1L;
+public class UserlessSession extends AuthenticationSessionAbstract {
- public UserlessSession() {
- super("__web_default", "");
- }
+ private static final long serialVersionUID = 1L;
- public UserlessSession(DataInputExtended input) throws IOException {
- super(input);
- }
+ public UserlessSession() {
+ super("__web_default", Arrays.asList(new String[] { "not-logged-in" }), "");
+ }
+
+ public UserlessSession(DataInputExtended input) throws IOException {
+ super(input);
+ }
-
}
-
-
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/context/RequestContext.java Tue Jan 25 10:04:36 2011
@@ -346,6 +346,7 @@ public abstract class RequestContext {
}
public String replaceVariables(String value, boolean ensureExists) {
+ LOG.debug("replacing" + value);
int start = value.indexOf("${");
if (start == -1) {
return value;
@@ -656,7 +657,7 @@ public abstract class RequestContext {
public abstract String getUri();
- public void setStatus(int status) {}
+ public void raiseError(int status) {}
public void setContentType(String string) {}
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugAction.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugAction.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/debug/DebugAction.java Tue Jan 25 10:04:36 2011
@@ -70,6 +70,8 @@ public class DebugAction implements Acti
String action = context.getParameter("action");
if ("i18n".equals(action)) {
i18n(context, null);
+ } else if ("authorization".equals(action)) {
+ authorization(context, null);
} else {
DebugView view = new DebugView(context.getWriter(), new DebugString());
view.header();
@@ -77,6 +79,7 @@ public class DebugAction implements Acti
view.appendln("<a href=\"debug.app?action=system\">System</a>");
view.appendln(" | <a href=\"debug.app?action=specifications\">List specifications</a>");
view.appendln(" | <a href=\"debug.app?action=i18n\">I18N File</a>");
+ view.appendln(" | <a href=\"debug.app?action=authorization\">Authorization File</a>");
view.appendln(" | <a href=\"debug.app?action=context\">Context</a>");
view.appendln(" | <a href=\"debug.app?action=dispatcher\">Dispatcher</a>");
view.appendln("</div>");
@@ -153,6 +156,38 @@ public class DebugAction implements Acti
}
}
+ private void authorization(RequestContext context, DebugView view) {
+ Collection<ObjectSpecification> allSpecifications = getSpecificationLoader().allSpecifications();
+ final List<ObjectSpecification> specs = Lists.newArrayList(allSpecifications);
+ Collections.sort(specs, new Comparator<ObjectSpecification>() {
+ public int compare(ObjectSpecification o1, ObjectSpecification o2) {
+ return o1.getShortIdentifier().compareTo(o2.getShortIdentifier());
+ }
+ });
+ Function<ObjectSpecification, String> className = ObjectSpecification.FUNCTION_FULLY_QUALIFIED_CLASS_NAME;
+ final List<String> fullIdentifierList = Lists.newArrayList(Collections2.transform(specs, className));
+ for (String fullIdentifier : fullIdentifierList) {
+ ObjectSpecification spec = getSpecificationLoader().loadSpecification(fullIdentifier);
+ if (spec.getAssociations().size() == 0 && spec.getObjectActionsAll().size() == 0) {
+ continue;
+ }
+ String name = spec.getIdentifier().toClassIdentityString();
+ context.getWriter().append("# " + spec.getShortIdentifier() +"\n");
+ context.getWriter().append("" + name + ":roles\n");
+ for (ObjectAssociation assoc : spec.getAssociations()) {
+ context.getWriter().append("#" + name + "#" + assoc.getId() + ":roles\n");
+ // context.getWriter().append("#" + name + ".property." + assoc.getId() + ".description" + "=\n");
+ // context.getWriter().append("#" + name + ".property." + assoc.getId() + ".help" + "=\n");
+ }
+ for (ObjectAction action : spec.getObjectActionsAll()) {
+ context.getWriter().append("#" + name + "#" + action.getId() + "():roles\n");
+ // context.getWriter().append("#" + name + ".action." + action.getId() + ".description" + "=\n");
+ // context.getWriter().append("#" + name + ".action." + action.getId() + ".help" + "=\n");
+ }
+ context.getWriter().append("\n");
+ }
+ }
+
private void specification(RequestContext context, DebugView view) {
String name = context.getParameter("name");
ObjectSpecification spec = getSpecificationLoader().loadSpecification(name);
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/edit/EditAction.java Tue Jan 25 10:04:36 2011
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.scimpi.di
import java.io.IOException;
import java.util.List;
+import java.util.Locale;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.version.Version;
@@ -58,6 +59,12 @@ public class EditAction implements Actio
resultName = resultName == null ? RequestContext.RESULT : resultName;
String override = context.getParameter(RESULT_OVERRIDE);
+ Locale locale = Locale.getDefault();
+ String localeString = context.getParameter("locale");
+ if (localeString != null) {
+ locale = new Locale(localeString);
+ }
+
ObjectAdapter adapter = context.getMappedObject(objectId);
List<ObjectAssociation> fields = adapter.getSpecification().getAssociations(ObjectAssociationFilters.STATICALLY_VISIBLE_ASSOCIATIONS);
FormState entryState = validateObject(context, adapter, fields);
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/action/RunAction.java Tue Jan 25 10:04:36 2011
@@ -17,7 +17,6 @@
* under the License.
*/
-
package org.apache.isis.viewer.scimpi.dispatcher.view.action;
import java.util.List;
@@ -25,6 +24,7 @@ import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.runtime.context.IsisContext;
import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
@@ -34,7 +34,7 @@ import org.apache.isis.viewer.scimpi.dis
public class RunAction extends AbstractElementProcessor {
-
+
@Override
public void process(Request request) {
RequestContext context = request.getContext();
@@ -52,11 +52,21 @@ public class RunAction extends AbstractE
request.setBlockContent(parameterBlock);
request.processUtilCloseTag();
ObjectAdapter[] parameters = parameterBlock.getParameters(request);
-
+
if (!MethodsUtils.isVisibleAndUsable(object, action)) {
- throw new ScimpiException("Action is not visible/enabled: " + action.getName());
+ throw new ScimpiException("Action '" + action.getId() + "' is not visible/enabled in "
+ + action.getOnType().getFullIdentifier() + ", for " + IsisContext.getSession().getAuthenticationSession().getRoles());
+ /* TODO remove if the above is correct
+ if (action.isContributed()) {
+ throw new ScimpiException("Action '" + action.getId() + "' is not visible/enabled in "
+ + action.getOnType().getFullIdentifier() + ", for " + IsisContext.getSession().getAuthenticationSession().getRoles());
+ } else {
+ throw new ScimpiException("Action '" + action.getId() + "' is not visible/enabled in "
+ + object.getSpecification().getFullIdentifier() + ", for " + IsisContext.getSession().getAuthenticationSession().getRoles());
+ }
+ */
}
-
+
// swap null parameter of the object's type to run a contributed method
if (action.isContributed()) {
final List<ObjectActionParameter> parameterSpecs = action.getParameters();
@@ -67,7 +77,7 @@ public class RunAction extends AbstractE
}
}
}
-
+
Scope scope = RequestContext.scope(scopeName, Scope.REQUEST);
MethodsUtils.runMethod(context, action, object, parameters, variableName, scope);
request.popBlockContent();
@@ -79,4 +89,3 @@ public class RunAction extends AbstractE
}
}
-
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Diagnostics.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Diagnostics.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Diagnostics.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Diagnostics.java Tue Jan 25 10:04:36 2011
@@ -20,6 +20,9 @@
package org.apache.isis.viewer.scimpi.dispatcher.view.debug;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.runtime.context.IsisContext;
+import org.apache.isis.core.runtime.session.IsisSession;
import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext;
import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
@@ -38,6 +41,11 @@ public class Diagnostics extends Abstrac
request.appendHtml("URI: " + context.getUri());
request.appendHtml("\n");
request.appendHtml("File: " + context.fullFilePath(context.getResourceFile()));
+ request.appendHtml("\n");
+
+ AuthenticationSession session = IsisContext.getAuthenticationSession();
+ request.appendHtml("Session: " + session.getUserName() + " " + session.getRoles());
+
if (!isExcludeVariables) {
request.appendHtml("\n\n");
request.appendHtml("<a class=\"option\" target=\"debug\" href=\"debug.app\">Object</a>");
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/ThrowException.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/ThrowException.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/ThrowException.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/ThrowException.java Tue Jan 25 10:04:36 2011
@@ -29,10 +29,8 @@ import org.apache.isis.viewer.scimpi.dis
public class ThrowException extends AbstractElementProcessor {
public void process(Request request) {
- if (request.getContext().getDebug() == RequestContext.Debug.ON) {
- String message = request.getOptionalProperty("message", "Exception throw for testing purposes");
- throw new IsisException(message);
- }
+ String message = request.getOptionalProperty("message", "Exception throw for testing purposes");
+ throw new IsisException(message);
}
public String getName() {
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/GetField.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/GetField.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/GetField.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/GetField.java Tue Jan 25 10:04:36 2011
@@ -17,7 +17,6 @@
* under the License.
*/
-
package org.apache.isis.viewer.scimpi.dispatcher.view.display;
import java.text.DecimalFormat;
@@ -25,6 +24,7 @@ import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Date;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.progmodel.facets.value.date.DateValueFacet;
@@ -50,10 +50,12 @@ public class GetField extends AbstractEl
if (field == null) {
throw new ScimpiException("No field " + fieldName + " in " + object.getSpecification().getFullIdentifier());
}
- if (field.isVisible(IsisContext.getAuthenticationSession(), object).isVetoed()) {
- throw new ForbiddenException("Field " + fieldName + " in " + object + " is not visible");
+ AuthenticationSession session = IsisContext.getAuthenticationSession();
+ if (field.isVisible(session, object).isVetoed()) {
+ throw new ForbiddenException("Field '" + fieldName + "' in " + object.getSpecification().getFullIdentifier()
+ + " is not visible for " + session.getUserName() + " " + session.getRoles());
}
-
+
String pattern = request.getOptionalProperty("decimal-format");
Format format = null;
if (pattern != null) {
@@ -63,11 +65,11 @@ public class GetField extends AbstractEl
if (pattern != null) {
format = new SimpleDateFormat(pattern);
}
-
+
String name = request.getOptionalProperty(RESULT_NAME, fieldName);
String scopeName = request.getOptionalProperty(SCOPE);
Scope scope = RequestContext.scope(scopeName, Scope.REQUEST);
-
+
process(request, object, field, format, name, scope);
}
@@ -77,11 +79,11 @@ public class GetField extends AbstractEl
DateValueFacet facet = fieldReference.getSpecification().getFacet(DateValueFacet.class);
Date date = facet.dateValue(fieldReference);
String value = format.format(date);
- request.appendDebug(" " + object + " -> " + value);
+ request.appendDebug(" " + object + " -> " + value);
request.getContext().addVariable(name, value, scope);
} else {
String source = fieldReference == null ? "" : request.getContext().mapObject(fieldReference, scope);
- request.appendDebug(" " + object + " -> " + source);
+ request.appendDebug(" " + object + " -> " + source);
request.getContext().addVariable(name, source, scope);
}
}
@@ -91,4 +93,3 @@ public class GetField extends AbstractEl
}
}
-
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/TableCell.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/TableCell.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/TableCell.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/display/TableCell.java Tue Jan 25 10:04:36 2011
@@ -24,7 +24,6 @@ import org.apache.isis.core.metamodel.ad
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.runtime.context.IsisContext;
import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
-import org.apache.isis.viewer.scimpi.dispatcher.ForbiddenException;
import org.apache.isis.viewer.scimpi.dispatcher.ScimpiException;
import org.apache.isis.viewer.scimpi.dispatcher.context.RequestContext.Scope;
import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
@@ -42,22 +41,23 @@ public class TableCell extends AbstractE
if (field == null) {
throw new ScimpiException("No field " + fieldName + " in " + object.getSpecification().getFullIdentifier());
}
- if (field.isVisible(IsisContext.getAuthenticationSession(), object).isVetoed()) {
- throw new ForbiddenException("Field " + fieldName + " in " + object + " is not visible");
- }
request.appendHtml("<td" + className + ">");
- ObjectAdapter fieldReference = field.get(object);
- String source = fieldReference == null ? "" : request.getContext().mapObject(fieldReference, Scope.REQUEST);
- String name = request.getOptionalProperty(RESULT_NAME, fieldName);
- request.getContext().addVariable(name, source, Scope.REQUEST);
-
- request.pushNewBuffer();
- request.processUtilCloseTag();
- String buffer = request.popBuffer();
- if (buffer.trim().length() == 0) {
- request.appendHtml( fieldReference == null ? "" : fieldReference.titleString());
+ if (field.isVisible(IsisContext.getAuthenticationSession(), object).isAllowed()) {
+ ObjectAdapter fieldReference = field.get(object);
+ String source = fieldReference == null ? "" : request.getContext().mapObject(fieldReference, Scope.REQUEST);
+ String name = request.getOptionalProperty(RESULT_NAME, fieldName);
+ request.getContext().addVariable(name, source, Scope.REQUEST);
+
+ request.pushNewBuffer();
+ request.processUtilCloseTag();
+ String buffer = request.popBuffer();
+ if (buffer.trim().length() == 0) {
+ request.appendHtml( fieldReference == null ? "" : fieldReference.titleString());
+ } else {
+ request.appendHtml(buffer);
+ }
} else {
- request.appendHtml(buffer);
+ request.skipUntilClose();
}
request.appendHtml("</td>");
}
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/EditObject.java Tue Jan 25 10:04:36 2011
@@ -21,6 +21,8 @@
package org.apache.isis.viewer.scimpi.dispatcher.view.edit;
import java.util.List;
+import java.util.Locale;
+import java.util.TimeZone;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -59,6 +61,13 @@ public class EditObject extends Abstract
String scope = request.getOptionalProperty(SCOPE);
String className = request.getOptionalProperty(CLASS, "edit");
String id = request.getOptionalProperty(ID);
+/*
+ String localeId = request.getOptionalProperty("locale");
+ String timeZoneId = request.getOptionalProperty("timezone");
+
+ */
+ Locale locale = null; // new Locale(localeId);
+ TimeZone timeZone = null; //TimeZone.getTimeZone(timeZoneId);
final ObjectAdapter object = context.getMappedObjectOrResult(objectId);
String actualObjectId = context.mapObject(object, Scope.INTERACTION);
@@ -84,7 +93,7 @@ public class EditObject extends Abstract
FormState entryState = (FormState) context.getVariable(ENTRY_FIELDS);
initializeFields(context, object, formFields, entryState, !hideNonEditableFields);
setDefaults(context, object, formFields, entryState);
- copyFieldContent(context, object, formFields);
+ copyFieldContent(context, object, formFields, locale, timeZone);
overrideWithHtml(context, containedBlock, formFields);
if (entryState != null && entryState.isForForm(actualObjectId)) {
copyEntryState(context, object, formFields, entryState);
@@ -197,7 +206,7 @@ public class EditObject extends Abstract
}
}
- private void copyFieldContent(RequestContext context, ObjectAdapter object, InputField[] formFields) {
+ private void copyFieldContent(RequestContext context, ObjectAdapter object, InputField[] formFields, Locale locale, TimeZone TimeZone) {
for (int i = 0; i < formFields.length; i++) {
String fieldName = formFields[i].getName();
ObjectAssociation field = object.getSpecification().getAssociation(fieldName);
@@ -206,12 +215,12 @@ public class EditObject extends Abstract
IsisContext.getPersistenceSession().resolveField(object, field);
ObjectAdapter fieldValue = field.get(object);
if (inputField.isEditable()) {
- String value = getValue(context, fieldValue);
+ String value = getValue(context, fieldValue, locale, TimeZone);
if (!value.equals("") || inputField.getValue() == null) {
inputField.setValue(value);
}
} else {
- String entry = getValue(context, fieldValue);
+ String entry = getValue(context, fieldValue, locale, TimeZone);
inputField.setHtml(entry);
inputField.setType(InputField.HTML);
@@ -305,13 +314,25 @@ public class EditObject extends Abstract
}
}
- private String getValue(RequestContext context, ObjectAdapter field) {
+ private String getValue(RequestContext context, ObjectAdapter field, Locale locale, TimeZone timeZone) {
if (field == null) {
return "";
}
- if (field.getSpecification().getFacet(ParseableFacet.class) == null) {
+ ParseableFacet facet = field.getSpecification().getFacet(ParseableFacet.class);
+ if (facet == null) {
return context.mapObject(field, Scope.INTERACTION);
} else {
+ /*
+ if ( field.getObject() instanceof DateTime) {
+ Date date = ((DateTime) field.getObject()).dateValue();
+
+ DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
+ format.setTimeZone(timeZone);
+
+ return format.format(date);
+ } else {
+ }
+ */
return field.titleString();
}
}
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/FieldFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/FieldFactory.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/FieldFactory.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/FieldFactory.java Tue Jan 25 10:04:36 2011
@@ -75,7 +75,7 @@ public class FieldFactory {
} else if (spec.getFullIdentifier().endsWith(".Password")) {
field.setType(InputField.PASSWORD);
} else {
- field.setType(InputField.TEXT);
+ field.setType(InputField.TEXT);
}
} else {
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/Selector.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/Selector.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/Selector.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/edit/Selector.java Tue Jan 25 10:04:36 2011
@@ -97,19 +97,21 @@ public class Selector extends AbstractEl
}
}
- private String showSelectionList(Request request, ObjectAdapter collection, String type) {
+ private String showSelectionList(Request request, ObjectAdapter collection, String type) {
String field = request.getRequiredProperty(FIELD);
CollectionFacet facet = (CollectionFacet) collection.getSpecification().getFacet(CollectionFacet.class);
- if (facet.size(collection) == 1) {
+ boolean allowNotSet = true;
+
+ if (facet.size(collection) == 1 && !allowNotSet) {
return onlyItem(request, field, collection, facet);
} else if (type.equals("radio")) {
- return radioButtonList(request, field, collection, facet);
+ return radioButtonList(request, field, allowNotSet, collection, facet);
} else if (type.equals("list")) {
String size = request.getOptionalProperty("size", "5");
- return dropdownList(request, field, collection, size, facet);
+ return dropdownList(request, field, allowNotSet, collection, size, facet);
} else if (type.equals("dropdown")) {
- return dropdownList(request, field, collection, null, facet);
+ return dropdownList(request, field, allowNotSet, collection, null, facet);
} else {
throw new UnknownTypeException(type);
}
@@ -127,10 +129,14 @@ public class Selector extends AbstractEl
return buffer.toString();
}
- private String radioButtonList(Request request, String field, ObjectAdapter collection, CollectionFacet facet) {
+ private String radioButtonList(Request request, String field, boolean allowNotSet, ObjectAdapter collection, CollectionFacet facet) {
RequestContext context = request.getContext();
Iterator<ObjectAdapter> iterator = facet.iterator(collection);
StringBuffer buffer = new StringBuffer();
+ if (allowNotSet) {
+ buffer.append("<input type=\"radio\" name=\"" + field + "\" value=\"null\">" + "[not set]"
+ + "</input><br/>\n");
+ }
while (iterator.hasNext()) {
ObjectAdapter element = iterator.next();
String elementId = context.mapObject(element, Scope.INTERACTION);
@@ -143,12 +149,15 @@ public class Selector extends AbstractEl
return buffer.toString();
}
- private String dropdownList(Request request, String field, ObjectAdapter collection, String size, CollectionFacet facet) {
+ private String dropdownList(Request request, String field, boolean allowNotSet, ObjectAdapter collection, String size, CollectionFacet facet) {
RequestContext context = request.getContext();
Iterator<ObjectAdapter> iterator = facet.iterator(collection);
StringBuffer buffer = new StringBuffer();
size = size == null ? "" : " size =\"" + size + "\"";
buffer.append("<select name=\"" + field + "\"" + size + " >\n");
+ if (allowNotSet) {
+ buffer.append(" <option value=\"null\">" + "[not set]" + "</option>\n");
+ }
while (iterator.hasNext()) {
ObjectAdapter element = iterator.next();
String elementId = context.mapObject(element, Scope.INTERACTION);
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/form/InputForm.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/form/InputForm.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/form/InputForm.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/form/InputForm.java Tue Jan 25 10:04:36 2011
@@ -167,7 +167,7 @@ public class InputForm {
String selectedSegment = field.getValue() == null || ids[i].equals(field.getValue()) ? " selected=\"selected\"" : "";
str.append(" <option value=\"" + ids[i] + "\"" + selectedSegment + ">" + options[i] + "</option>\n");
}
- if (field.getType() == InputField.TEXT) {
+ if (field.getType() == InputField.TEXT) {
str.append(" <option value=\"-OTHER-\">Other:</option>\n");
}
str.append(" </select>");
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/AbstractConditionalBlock.java Tue Jan 25 10:04:36 2011
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.scimpi.di
import java.util.List;
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
@@ -159,6 +160,21 @@ public abstract class AbstractConditiona
processTags(hasType, request);
return;
}
+
+ String hasRole = request.getOptionalProperty("has-role");
+ if (hasRole != null) {
+ AuthenticationSession session = IsisContext.getSession().getAuthenticationSession();
+ List<String> roles = session.getRoles();
+ boolean hasMatchingRole = false;
+ for (String role : roles) {
+ if (role.equals(hasRole.trim())) {
+ hasMatchingRole = true;
+ break;
+ }
+ }
+ processTags(hasMatchingRole, request);
+ return;
+ }
if (request.isPropertySpecified("empty")) {
if (request.isPropertySet("empty")) {
Modified: incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java?rev=1063200&r1=1063199&r2=1063200&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java (original)
+++ incubator/isis/trunk/viewer/scimpi/servlet/src/main/java/org/apache/isis/viewer/scimpi/servlet/ServletRequestContext.java Tue Jan 25 10:04:36 2011
@@ -47,9 +47,10 @@ public class ServletRequestContext exten
private ServletContext servletContext;
public void append(DebugView view) {
+ /*
view.divider("System");
- // Runtime.getRuntime().
-
+ Runtime.getRuntime().
+ */
view.divider("Request");
view.appendRow("Auth type", request.getAuthType());
view.appendRow("Character encoding", request.getCharacterEncoding());
@@ -222,14 +223,14 @@ public class ServletRequestContext exten
}
}
- public void setStatus(int status) {
- /*
+ public void raiseError(int status) {
+
try {
getResponse().sendError(status);
} catch (IOException e) {
throw new RuntimeException(e);
}
- */
+
getResponse().setStatus(status);
}