Repository: isis
Updated Branches:
  refs/heads/master 0ccc73ee2 -> dcc7e0526


ISIS-1057 Use PageClassRegistry to get the configured signin page and 
instantiate it


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/dcc7e052
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/dcc7e052
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/dcc7e052

Branch: refs/heads/master
Commit: dcc7e05269412a3fc0405781188a02d9e40ac382
Parents: 0ccc73e
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Wed Feb 25 15:48:34 2015 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Wed Feb 25 15:51:25 2015 +0200

----------------------------------------------------------------------
 .../wicket/WebRequestCycleForIsis.java          | 36 ++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/dcc7e052/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
----------------------------------------------------------------------
diff --git 
a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
 
b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
index e4cfa30..6d8ca62 100644
--- 
a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
+++ 
b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/WebRequestCycleForIsis.java
@@ -19,13 +19,18 @@
 
 package org.apache.isis.viewer.wicket.viewer.integration.wicket;
 
+import java.lang.reflect.Constructor;
 import java.util.List;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 
+import org.apache.wicket.Application;
+import org.apache.wicket.IPageFactory;
+import org.apache.wicket.Page;
 import org.apache.wicket.RestartResponseException;
 import org.apache.wicket.Session;
+import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
 import org.apache.wicket.core.request.handler.PageProvider;
 import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
@@ -36,6 +41,7 @@ import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.cycle.AbstractRequestCycleListener;
 import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -47,9 +53,10 @@ import 
org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.session.IsisSession;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
+import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.errors.ExceptionModel;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 import org.apache.isis.viewer.wicket.ui.pages.error.ErrorPage;
-import org.apache.isis.viewer.wicket.ui.pages.login.WicketSignInPage;
 import org.apache.isis.viewer.wicket.ui.pages.mmverror.MmvErrorPage;
 import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
 
@@ -174,7 +181,32 @@ public class WebRequestCycleForIsis extends 
AbstractRequestCycleListener {
         String recognizedMessageIfAny = new 
ExceptionRecognizerComposite(exceptionRecognizers).recognize(ex);
         ExceptionModel exceptionModel = 
ExceptionModel.create(recognizedMessageIfAny, ex);
         
-        return isSignedIn() ? new ErrorPage(exceptionModel) : new 
WicketSignInPage(null, exceptionModel);
+        return isSignedIn() ? new ErrorPage(exceptionModel) : 
newSignInPage(exceptionModel);
+    }
+
+    /**
+     * Tries to instantiate the configured {@link PageType#SIGN_IN signin 
page} with the given exception model
+     *
+     * @param exceptionModel A model bringing the information about the 
occurred problem
+     * @return An instance of the configured signin page
+     */
+    private IRequestablePage newSignInPage(ExceptionModel exceptionModel) {
+        PageClassRegistry pageClassRegistry = 
getServicesInjector().lookupService(PageClassRegistry.class);
+        Class<? extends Page> signInPageClass = 
pageClassRegistry.getPageClass(PageType.SIGN_IN);
+        PageParameters parameters = new PageParameters();
+        Page signInPage;
+        try {
+            Constructor<? extends Page> constructor = 
signInPageClass.getConstructor(PageParameters.class, ExceptionModel.class);
+            signInPage = constructor.newInstance(parameters, exceptionModel);
+        } catch (Exception _) {
+            try {
+                IPageFactory pageFactory = Application.get().getPageFactory();
+                signInPage = pageFactory.newPage(signInPageClass, parameters);
+            } catch (Exception x) {
+                throw new WicketRuntimeException("Cannot instantiate the 
configured sign in page", x);
+            }
+        }
+        return signInPage;
     }
 
     /**

Reply via email to