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/04/28 20:08:13 UTC
svn commit: r1097566 - 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: Thu Apr 28 18:08:12 2011
New Revision: 1097566
URL: http://svn.apache.org/viewvc?rev=1097566&view=rev
Log:
- Improved debugging/exceptions
- Added elements to forward and redirect requests
Added:
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Commit.java (with props)
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Forward.java (with props)
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Redirect.java (with props)
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/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/processor/ProcessorLookup.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebuggerLink.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/PrintAuthorizationClause.java
incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.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=1097566&r1=1097565&r2=1097566&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 Thu Apr 28 18:08:12 2011
@@ -20,7 +20,6 @@
package org.apache.isis.viewer.scimpi.dispatcher;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
@@ -38,6 +37,7 @@ import java.util.Stack;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.core.commons.debug.DebugBuilder;
+import org.apache.isis.core.commons.debug.DebugHtmlString;
import org.apache.isis.core.commons.debug.DebugString;
import org.apache.isis.core.commons.debug.DebugTee;
import org.apache.isis.core.commons.exceptions.IsisException;
@@ -73,8 +73,6 @@ import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
-import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMessages;
-
public class Dispatcher {
public static final String ACTION = "_action";
@@ -135,10 +133,7 @@ public class Dispatcher {
LOG.info("error " + errorRef);
LOG.debug(e.getMessage(), e);
- DebugString error = new DebugString();
- generateErrorPage(e, context, error, errorRef);
- String message = "failed while processing " + servletPath;
- LOG.error(message + " (#" + errorRef + ")\n" + error + "\n" + message);
+ prepareErrorDetails(e, context, errorRef, servletPath);
PersistenceSession checkSession = IsisContext.getPersistenceSession();
IsisTransactionManager transactionManager = checkSession.getTransactionManager();
@@ -149,15 +144,19 @@ public class Dispatcher {
Throwable ex = e instanceof TagProcessingException ? e.getCause() : e;
if (ex instanceof ForbiddenException) {
- context.addVariable("_security_error", ex.getMessage(), Scope.REQUEST);
- context.addVariable("_security_identifier", ((ForbiddenException) ex).getIdentifier(), Scope.REQUEST);
- context.addVariable("_security_roles", ((ForbiddenException) ex).getRoles(), Scope.REQUEST);
+ context.addVariable("_security-context", ((TagProcessingException) e).getContext(), Scope.ERROR);
+ context.addVariable("_security-error", ex.getMessage(), Scope.ERROR);
+ context.addVariable("_security-identifier", ((ForbiddenException) ex).getIdentifier(), Scope.ERROR);
+ context.addVariable("_security-roles", ((ForbiddenException) ex).getRoles(), Scope.ERROR);
// TODO allow these values to be got configuration
// context.raiseError(403);
// context.setRequestPath("/error/security_403.shtml");
- IsisContext.getMessageBroker().addWarning("You did not have the right permissions to perform this (#" + errorRef + ")");
+ IsisContext.getMessageBroker().addWarning("You don't have the right permissions to perform this (#" + errorRef + ")" +
+ "<span class=\"debug-link\" onclick=\"$('#security-dump').toggle()\" > ...</span>");
+ context.clearVariables(Scope.REQUEST);
context.setRequestPath("/index.shtml");
+ context.setRequestPath("/error/security_403.shtml");
try {
processTheView(context);
} catch (IOException e1) {
@@ -167,16 +166,21 @@ public class Dispatcher {
// TODO allow these values to be got configuration
// context.raiseError(500);
// context.setRequestPath("/error/server_500.shtml");
- IsisContext.getMessageBroker().addWarning("There was a error while processing this request (#" + errorRef + ")");
+
+ String message = "There was a error while processing this request (#" + errorRef + ")" +
+ "<span class=\"debug-link\" onclick=\"$('#error-dump').toggle()\" > ...</span>";
+ IsisContext.getMessageBroker().addWarning(message);
context.clearVariables(Scope.REQUEST);
context.setRequestPath("/index.shtml");
try {
+ context.reset();
processTheView(context);
} catch (TagProcessingException e1) {
- IsisContext.getMessageBroker().addWarning("There was a error while processing this request (#" + errorRef + ")");
+ IsisContext.getMessageBroker().addWarning(message);
context.clearVariables(Scope.REQUEST);
context.setRequestPath("/error.shtml");
try {
+ context.reset();
processTheView(context);
} catch (IOException e2) {
throw new ScimpiException(e2);
@@ -184,6 +188,8 @@ public class Dispatcher {
} catch (IOException e1) {
throw new ScimpiException(e1);
}
+
+ // context.forward("/error.shtml");
}
} finally {
try {
@@ -212,29 +218,50 @@ public class Dispatcher {
}
- private void generateErrorPage(Throwable exception, RequestContext requestContext, DebugString error, String errorRef) {
+ private void prepareErrorDetails(Throwable exception, RequestContext requestContext, String errorRef, String servletPath) {
+ DebugString debugText = new DebugString();
+ DebugHtmlString debugHtml = new DebugHtmlString();
+ DebugBuilder debug = new DebugTee(debugText, debugHtml);
+
+ try {
+ debug.startSection("Exception");
+ debug.appendException(exception);
+ debug.endSection();
+ } catch (RuntimeException e) {
+ debug.appendln("NOTE - an exception occurred while dumping an exception!");
+ debug.appendException(e);
+ }
+
if (IsisContext.getCurrentTransaction() != null) {
List<String> messages = IsisContext.getMessageBroker().getMessages();
- for (String message : messages) {
- requestContext.getWriter().append("<div class=\"message\">message: " + message + "</div>");
- error.appendln("message", message);
- }
- messages = IsisContext.getMessageBroker().getWarnings();
- for (String message : messages) {
- requestContext.getWriter().append("<div class=\"message\">warning: " + message + "</div>");
- error.appendln("warning", message);
+ List<String> warnings = IsisContext.getMessageBroker().getWarnings();
+ if (messages.size() > 0 || messages.size() > 0) {
+ debug.startSection("Warnings/Messages");
+ for (String message : messages) {
+ debug.appendln("message", message);
+ }
+ for (String message : warnings) {
+ debug.appendln("warning", message);
+ }
}
}
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- writeErrorContent(requestContext, exception, error, new PrintWriter(out), false);
+ requestContext.append(debug);
+
+ debug.startSection("Processing Trace");
+ debug.appendPreformatted(requestContext.getDebugTrace());
+ debug.endSection();
+ debug.close();
+
PrintWriter writer;
try {
- requestContext.addVariable("_error-ref", errorRef, Scope.INTERACTION);
String directory = IsisContext.getConfiguration().getString(ConfigurationConstants.ROOT + "scimpi.error-snapshots", ".");
writer = new PrintWriter(new File(directory, "error_" + errorRef + ".html"));
- writeErrorContent(requestContext, exception, new DebugString(), writer, true);
+ DebugWriter writer2 = new DebugWriter(writer, true);
+ writer2.concat(debugHtml);
+ writer2.close();
+ writer.close();
} catch (FileNotFoundException e) {
LOG.error("Failed to archive error page", e);
}
@@ -242,33 +269,15 @@ public class Dispatcher {
String replace = "";
String withReplacement = "";
String message = exception.getMessage();
- requestContext.addVariable("_error-message", message == null ? "" : message.replaceAll(replace, withReplacement), Scope.INTERACTION);
- requestContext.addVariable("_error-details", out.toString().replaceAll(replace, withReplacement), Scope.INTERACTION);
+ requestContext.addVariable("_error-message", message == null ? "" : message.replaceAll(replace, withReplacement), Scope.ERROR);
+ requestContext.addVariable("_error-details", debugHtml.toString().replaceAll(replace, withReplacement), Scope.ERROR);
+ requestContext.addVariable("_error-ref", errorRef, Scope.ERROR);
requestContext.clearTransientVariables();
+
+ String msg = "failed during request for " + servletPath ;
+ LOG.error(msg + " (#" + errorRef + ")\n" + message +"\n" + debugText + "\n" + msg);
}
-
- public void writeErrorContent(
- RequestContext requestContext,
- Throwable exception,
- DebugString error,
- PrintWriter writer,
- boolean includeHeader) {
- DebugBuilder errorView = new DebugTee(error, new DebugWriter(writer, includeHeader));
- try {
- errorView.appendException(exception);
- requestContext.append(errorView);
- } catch (RuntimeException e) {
- errorView.appendln("NOTE - an exception occurred while dumping an exception!");
- errorView.appendException(e);
- }
- errorView.appendTitle("Processing");
- errorView.appendln("<pre>" + requestContext.getDebugTrace() + "</pre>");
- errorView.close();
- writer.close();
- }
-
-
public void addParameter(String name, String value) {
parameters.put(name, value);
}
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=1097566&r1=1097565&r2=1097566&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 Thu Apr 28 18:08:12 2011
@@ -54,7 +54,7 @@ public class ForbiddenException extends
private ForbiddenException(Identifier identifier, AuthenticationSession session, boolean isVisibleAndUsabable) {
super((identifier.getType() == Identifier.Type.PROPERTY_OR_COLLECTION ? "Field" : "Action") + " '"
- + identifier.getMemberName() + "' in " + identifier.getClassNaturalName() + " is not "
+ + identifier.getMemberName() + "' in " + identifier.getClassName() + " is not "
+ (isVisibleAndUsabable ? "visible/usable " : "visible") + " for " + session.getUserName() + " "
+ session.getRoles());
this.identifier = identifier;
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=1097566&r1=1097565&r2=1097566&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 Thu Apr 28 18:08:12 2011
@@ -50,7 +50,7 @@ public abstract class RequestContext {
private static final Logger LOG = Logger.getLogger(RequestContext.class);
public enum Scope {
- GLOBAL, SESSION, INTERACTION, REQUEST
+ GLOBAL, SESSION, INTERACTION, REQUEST, ERROR
};
public enum Debug {
@@ -87,7 +87,7 @@ public abstract class RequestContext {
public static final String ERROR = "_error";
public static final String BACK_TO = "_back_to";
private static final Map<String, Object> globalVariables = new HashMap<String, Object>();
- private static final Scope[] SCOPES = new Scope[] { Scope.REQUEST, Scope.INTERACTION, Scope.SESSION, Scope.GLOBAL };
+ private static final Scope[] SCOPES = new Scope[] { Scope.ERROR, Scope.REQUEST, Scope.INTERACTION, Scope.SESSION, Scope.GLOBAL };
private static DebugMode debugMode = null;
private ObjectMapping objectMapping;
@@ -117,6 +117,7 @@ public abstract class RequestContext {
variables.put(Scope.SESSION, new HashMap<String, Object>());
variables.put(Scope.INTERACTION, new HashMap<String, Object>());
variables.put(Scope.REQUEST, new HashMap<String, Object>());
+ variables.put(Scope.ERROR, new HashMap<String, Object>());
}
public void endHttpSession() {
@@ -253,29 +254,34 @@ public abstract class RequestContext {
// ////////////////////////////
// Debug
// ////////////////////////////
- public void append(DebugBuilder view) {
- view.appendTitle("User");
+ public void append(DebugBuilder debug) {
+ debug.startSection("Request");
+ debug.appendTitle("User");
AuthenticationSession session = getSession();
- view.appendln("Session", session);
+ debug.appendln("Session", session);
if (session != null) {
- view.appendln("Name", session.getUserName());
- view.appendln("Roles", session.getRoles());
+ debug.appendln("Name", session.getUserName());
+ debug.appendln("Roles", session.getRoles());
}
- view.appendTitle("context");
- view.appendln("Parent request path", requestedParentPath);
- view.appendln("Requested file", requestedFile);
- view.appendln("Parent resource path", resourceParentPath);
- view.appendln("Resource file", resourceFile);
-
- append(view, Scope.GLOBAL);
- append(view, Scope.SESSION);
- append(view, Scope.INTERACTION);
- append(view, Scope.REQUEST);
- view.endSection();
-
- view.startSection("Object Mapping");
- objectMapping.append(view);
+ debug.appendTitle("context");
+ debug.appendln("Parent request path", requestedParentPath);
+ debug.appendln("Requested file", requestedFile);
+ debug.appendln("Parent resource path", resourceParentPath);
+ debug.appendln("Resource file", resourceFile);
+ debug.endSection();
+
+ debug.startSection("Variables");
+ append(debug, Scope.GLOBAL);
+ append(debug, Scope.SESSION);
+ append(debug, Scope.INTERACTION);
+ append(debug, Scope.REQUEST);
+ append(debug, Scope.ERROR);
+ debug.endSection();
+
+ debug.startSection("Object Mapping");
+ objectMapping.append(debug);
+ debug.endSection();
}
private void append(DebugBuilder view, Scope scope) {
@@ -301,6 +307,8 @@ public abstract class RequestContext {
appendVariables(content, Scope.INTERACTION);
content.blankLine();
appendVariables(content, Scope.REQUEST);
+ content.blankLine();
+ appendVariables(content, Scope.ERROR);
} else if (list.equals("mappings")) {
objectMapping.appendMappings(content);
}
@@ -503,6 +511,7 @@ public abstract class RequestContext {
public void endRequest() throws IOException {
getWriter().close();
objectMapping.clear();
+ variables.get(Scope.ERROR).clear();
variables.get(Scope.REQUEST).clear();
variables.get(Scope.INTERACTION).clear();
}
@@ -709,6 +718,8 @@ public abstract class RequestContext {
public abstract String imagePath(ObjectSpecification specification);
+ public abstract void forward(String view);
+
public abstract void redirectTo(String view);
public abstract String getContextPath();
@@ -792,4 +803,6 @@ public abstract class RequestContext {
public void clearTransientVariables() {
objectMapping.endSession();
}
+
+ public void reset() {}
}
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=1097566&r1=1097565&r2=1097566&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 Thu Apr 28 18:08:12 2011
@@ -88,8 +88,8 @@ public class DebugAction implements Acti
view.appendln("<div class=\"links\">");
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=list-i18n\">I18N File</a>");
+ view.appendln(" | <a href=\"debug.app?action=list-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>");
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java?rev=1097566&r1=1097565&r2=1097566&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/processor/ProcessorLookup.java Thu Apr 28 18:08:12 2011
@@ -80,10 +80,12 @@ import org.apache.isis.viewer.scimpi.dis
import org.apache.isis.viewer.scimpi.dispatcher.view.logon.User;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.BlockDefine;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.BlockUse;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Commit;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.ContentTag;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.DefaultValue;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.EditLink;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.EndSession;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Forward;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.GetCookie;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Import;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.InitializeFromCookie;
@@ -92,6 +94,7 @@ import org.apache.isis.viewer.scimpi.dis
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.NewActionLink;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.ObjectLink;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.PageTitle;
+import org.apache.isis.viewer.scimpi.dispatcher.view.simple.Redirect;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.RemoveElement;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.ScopeTag;
import org.apache.isis.viewer.scimpi.dispatcher.view.simple.SetCookie;
@@ -124,6 +127,7 @@ public class ProcessorLookup {
addElementProcessor(new BlockUse());
addElementProcessor(new History());
addElementProcessor(new Collection());
+ addElementProcessor(new Commit());
addElementProcessor(new ContentTag());
addElementProcessor(new CountElements());
addElementProcessor(new Diagnostics());
@@ -140,6 +144,7 @@ public class ProcessorLookup {
addElementProcessor(new FieldValue());
addElementProcessor(new FormField());
addElementProcessor(new FormEntry());
+ addElementProcessor(new Forward());
addElementProcessor(new GetField());
addElementProcessor(new HiddenField());
addElementProcessor(new Import());
@@ -163,6 +168,7 @@ public class ProcessorLookup {
addElementProcessor(new ParameterName());
addElementProcessor(new PrintAuthorizationClause());
addElementProcessor(new RadioListField());
+ addElementProcessor(new Redirect());
addElementProcessor(new RemoveElement());
addElementProcessor(new RevisionNumber());
addElementProcessor(new RunAction());
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebuggerLink.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebuggerLink.java?rev=1097566&r1=1097565&r2=1097566&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebuggerLink.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/DebuggerLink.java Thu Apr 28 18:08:12 2011
@@ -34,7 +34,7 @@ public class DebuggerLink extends Abstra
RequestContext context = request.getContext();
Object result = context.getVariable(RequestContext.RESULT);
request.appendHtml("<div class=\"debug\">");
- request.appendHtml("<a href=\"/debug/debug.shtml\" target=\"debug\" title=\"debug\" >...</a>");
+ request.appendHtml("<a class=\"debug-link\" href=\"/debug/debug.shtml\" target=\"debug\" title=\"debug\" >...</a>");
if (result != null) {
request.appendHtml(" <a href=\"/debug/object.shtml?_result=" + result + "\" target=\"debug\" title=\"debug instance\">...</a>");
}
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/PrintAuthorizationClause.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/PrintAuthorizationClause.java?rev=1097566&r1=1097565&r2=1097566&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/PrintAuthorizationClause.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/PrintAuthorizationClause.java Thu Apr 28 18:08:12 2011
@@ -19,8 +19,8 @@ public class PrintAuthorizationClause ex
return;
}
- Identifier identifier = (Identifier) context.getVariable("_security_identifier");
- List<String> roles = (List<String>) context.getVariable("_security_roles");
+ Identifier identifier = (Identifier) context.getVariable("_security-identifier");
+ List<String> roles = (List<String>) context.getVariable("_security-roles");
StringBuffer roleList = new StringBuffer();
for (String role : roles) {
if (roleList.length() > 0) {
@@ -31,7 +31,8 @@ public class PrintAuthorizationClause ex
request.appendHtml("<pre>" );
request.appendHtml(identifier.toClassIdentityString() + ":" + roleList + "\n");
- request.appendHtml(identifier.toString() + ":" + roleList);
+ request.appendHtml(identifier.toClassAndNameIdentityString() + ":" + roleList + "\n");
+ request.appendHtml(identifier.toFullIdentityString() + ":" + roleList + "\n");
request.appendHtml( "</pre>");
}
Added: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Commit.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Commit.java?rev=1097566&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Commit.java (added)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Commit.java Thu Apr 28 18:08:12 2011
@@ -0,0 +1,24 @@
+package org.apache.isis.viewer.scimpi.dispatcher.view.simple;
+
+import org.apache.isis.runtimes.dflt.runtime.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.transaction.IsisTransactionManager;
+import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+
+public class Commit extends AbstractElementProcessor {
+
+ public String getName() {
+ return "commit";
+ }
+
+ public void process(Request request) {
+ // Note - the session will have changed since the earlier call if a user has logged in or out in the action processing above.
+ IsisTransactionManager transactionManager = IsisContext.getPersistenceSession().getTransactionManager();
+ if (transactionManager.getTransaction().getState().canCommit()) {
+ transactionManager.endTransaction();
+ transactionManager.startTransaction();
+ }
+ }
+
+}
+
Propchange: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Commit.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Forward.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Forward.java?rev=1097566&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Forward.java (added)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Forward.java Thu Apr 28 18:08:12 2011
@@ -0,0 +1,18 @@
+package org.apache.isis.viewer.scimpi.dispatcher.view.simple;
+
+import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+
+public class Forward extends AbstractElementProcessor {
+
+ public String getName() {
+ return "forward";
+ }
+
+ public void process(Request request) {
+ String view = request.getRequiredProperty(VIEW);
+ request.getContext().forward(view);
+ }
+
+}
+
Propchange: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Forward.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Redirect.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Redirect.java?rev=1097566&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Redirect.java (added)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Redirect.java Thu Apr 28 18:08:12 2011
@@ -0,0 +1,18 @@
+package org.apache.isis.viewer.scimpi.dispatcher.view.simple;
+
+import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
+import org.apache.isis.viewer.scimpi.dispatcher.processor.Request;
+
+public class Redirect extends AbstractElementProcessor {
+
+ public String getName() {
+ return "redirect";
+ }
+
+ public void process(Request request) {
+ String view = request.getRequiredProperty(VIEW);
+ request.getContext().redirectTo(view);
+ }
+
+}
+
Propchange: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/Redirect.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java?rev=1097566&r1=1097565&r2=1097566&view=diff
==============================================================================
--- incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java (original)
+++ incubator/isis/trunk/viewer/scimpi/dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/RemoveElement.java Thu Apr 28 18:08:12 2011
@@ -25,8 +25,10 @@ import java.util.List;
import org.apache.isis.applib.filter.Filter;
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.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociationFilters;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
import org.apache.isis.runtimes.dflt.runtime.context.IsisContext;
import org.apache.isis.viewer.scimpi.dispatcher.AbstractElementProcessor;
import org.apache.isis.viewer.scimpi.dispatcher.Dispatcher;
@@ -77,12 +79,23 @@ public class RemoveElement extends Abstr
if (field == null) {
throw new ScimpiException("No field " + fieldName + " in " + adapter.getSpecification().getFullIdentifier());
}
+ if (!field.isOneToManyAssociation()) {
+ throw new ScimpiException("Field " + fieldName + " not a collection, in " + adapter.getSpecification().getFullIdentifier());
+ }
if (field.isVisible(IsisContext.getAuthenticationSession(), adapter).isVetoed()) {
throw new ForbiddenException(field, ForbiddenException.VISIBLE);
}
IsisContext.getPersistenceSession().resolveField(adapter, field);
- if (field.isUsable(IsisContext.getAuthenticationSession(), adapter).isAllowed()) {
+
+ Consent usable = field.isUsable(IsisContext.getAuthenticationSession(), adapter);
+ if (usable.isAllowed()) {
+ usable = ((OneToManyAssociation) field).isValidToRemove(adapter, element);
+ }
+
+ if (usable.isVetoed()) {
+ request.appendHtml("<span class=\"veto\">" + usable.getReason() + "</span>");
+ } else {
if (valid(request, adapter)) {
String classSegment = " class=\"" + cssClass + "\"";
@@ -116,6 +129,8 @@ public class RemoveElement extends Abstr
return false;
}
+
+
return true;
}
}
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=1097566&r1=1097565&r2=1097566&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 Thu Apr 28 18:08:12 2011
@@ -28,6 +28,7 @@ import java.util.Enumeration;
import java.util.Map;
import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -219,6 +220,26 @@ public class ServletRequestContext exten
return null;
}
+ public void reset() {
+ try {
+ response.getWriter().print("<h1>RESET</h1>");
+ } catch (IOException e) {
+ throw new DispatchException(e);
+ }
+ response.reset();
+ }
+
+ public void forward(String view) {
+ try {
+ isAborted = true;
+ getRequest().getRequestDispatcher(view).forward(getRequest(), getResponse());
+ } catch (IOException e) {
+ throw new DispatchException(e);
+ } catch (ServletException e) {
+ throw new DispatchException(e);
+ }
+ }
+
public void redirectTo(String view) {
try {
isAborted = true;