Author: simoneg
Date: Tue Oct 28 10:17:03 2008
New Revision: 708612

URL: http://svn.apache.org/viewvc?rev=708612&view=rev
Log:
LABS-193 : refixed

Modified:
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
    
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
    
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
    
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/SimpleSecondTemplate.java
    
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/second.html

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java?rev=708612&r1=708611&r2=708612&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/Dispatch.java
 Tue Oct 28 10:17:03 2008
@@ -93,8 +93,10 @@
                if (req.getServletPath().length() > 0) {
                        mybaseurl += "/" + req.getServletPath();
                }
-               
+
+               // Try to determine if current request is considered a main or 
not
                HttpSession session = req.getSession();
+               boolean validTemplate = false;
                Template t = producer.getTemplate();
                if (t == null) {
                        Class<Template> tplcl = (Class<Template>) 
session.getAttribute("__magma_lasttemplate");
@@ -109,37 +111,48 @@
                        }
                        if (t == null) {
                                t = getDefaultTemplate();
+                               validTemplate = true;
                        }
+               } else {
+                       validTemplate = true;
                }
-               session.setAttribute("__magma_lasttemplate", t.getClass());
                t.setCurrent(producer);
                
                final String last = (String) 
session.getAttribute("__magma_lastmain");
-               if (last != null) {
-                       t.setPrevious(new PreviousGiver() {
-                               public HtmlProducer getPrevious() {
-                                       try {
-                                               Producer prod = 
findProducer(last);
-                                               if (prod != null && prod 
instanceof HtmlProducer) {
-                                                       return (HtmlProducer) 
prod;
-                                               }
-                                       } catch (Exception e) {
-                                               // TODO log the exception
+               PreviousGiver giver = new PreviousGiver() {
+                       public HtmlProducer getPrevious() {
+                               try {
+                                       Producer prod = findProducer(last);
+                                       if (prod != null && prod instanceof 
HtmlProducer) {
+                                               return (HtmlProducer) prod;
                                        }
-                                       return null;
+                               } catch (Exception e) {
+                                       // TODO log the exception
                                }
-                       });
-               }
+                               return null;
+                       }
+               };              
+               t.setPrevious(giver);           
+               t.parse();
                
+               if (!validTemplate && t.wasMain()) {
+                       t = getDefaultTemplate();
+                       t.setCurrent(producer);
+                       t.setPrevious(null);
+                       t.setForceMain(true);
+                       t.parse();
+               }
+
                try {
                        t.produce(mybaseurl, resp.getOutputStream());
                } catch (IOException e) {
                        throw new MagmaException(e, "Error getting servlet 
output stream");
                }
-               System.out.println("Producer has a complete path of " + 
producer.getCompletePath());
                if (t.wasMain() && producer.getCompletePath() != null) {
                        session.setAttribute("__magma_lastmain", 
producer.getCompletePath());                   
-               }
+                       session.setAttribute("__magma_lasttemplate", 
t.getClass());
+               }               
+               System.out.println("Producer has a complete path of " + 
producer.getCompletePath());
        }
        
        public Template getDefaultTemplate() {

Modified: 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java?rev=708612&r1=708611&r2=708612&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/main/java/org/apache/magma/website/templating/Template.java
 Tue Oct 28 10:17:03 2008
@@ -40,9 +40,11 @@
        protected String fileName = "template.html";
        protected HtmlProducer current = null;
        protected PreviousGiver previous = null;
+       protected boolean forceMain = false;
        
        private String currentZone = null;
        private Map<String, List<HtmlProducer>> zones = new HashMap<String, 
List<HtmlProducer>>();
+       private TemplateData data;
        
        protected void always(HtmlProducer producer) {
                addInZone(producer);
@@ -50,15 +52,25 @@
        
        protected void ifNeeded(Class<? extends WebHandler> clazz) {
                if (current != null && current.isFrom(clazz)) {
-                       addInZone(current);
-                       current = null;
+                       if (forceMain && previous == null) {
+                               // Skip the auxiliary, cause we have to 
consider it as a main
+                               // TODO log this? it could be a problem.
+                       } else {
+                               addInZone(current);
+                               current = null;
+                       }
                }
        }
        
        protected void byDefault(Class<? extends WebHandler> clazz, 
HtmlProducer def) {
                if (current != null && current.isFrom(clazz)) {
-                       addInZone(current);
-                       current = null;
+                       if (forceMain && previous == null) {
+                               // Skip the auxiliary, cause we have to 
consider it as a main
+                               // TODO log this? it could be a problem.
+                       } else {
+                               addInZone(current);
+                               current = null;
+                       }
                } else {
                        addInZone(def);
                }
@@ -92,11 +104,11 @@
        public void setCurrent(HtmlProducer currentMain) {
                this.current = currentMain;
        }
-       
-       public void produce(String baseurl, OutputStream stream) {
-               TemplateData td = parseContent();
+
+       public void parse() {
+               data = parseContent();
                Method[] methods = getClass().getMethods();
-               for (String acZone : td.zones) {
+               for (String acZone : data.zones) {
                        currentZone = acZone;
                        if (currentZone == null) continue;
                        if (currentZone.equals("Main")) continue;
@@ -115,17 +127,19 @@
                }
                
                currentZone = "Main";
-               layoutMain();
-               
+               layoutMain();           
+       }
+       
+       public void produce(String baseurl, OutputStream stream) {
                try {
                        URLRewritingStream rewrite = new 
URLRewritingStream(stream, baseurl);
                        rewrite.setTemplatePrefix("template/" + 
getClass().getPackage().getName() + "/");
                        OutputStreamWriter osw = new 
OutputStreamWriter(rewrite, Charset.forName("UTF-8"));
-                       for (int i = 0; i < td.zones.size(); i++) {
+                       for (int i = 0; i < data.zones.size(); i++) {
                                rewrite.setBaseUrl(rewrite.getTemplatePrefix());
-                               osw.write(td.raws.get(i));
+                               osw.write(data.raws.get(i));
                                osw.flush();
-                               String zone = td.zones.get(i);
+                               String zone = data.zones.get(i);
                                if (zone == null) {
                                        Head head = new Head(rewrite);
                                        for (List<HtmlProducer> producers : 
zones.values()) {
@@ -156,7 +170,7 @@
                                }
                        }
                        rewrite.setBaseUrl(rewrite.getTemplatePrefix());
-                       osw.write(td.raws.get(td.zones.size()));
+                       osw.write(data.raws.get(data.zones.size()));
                        osw.flush();
                        rewrite.flush();
                } catch (IOException e) {
@@ -189,5 +203,9 @@
        public boolean wasMain() {
                return current != null;
        }
+
+       public void setForceMain(boolean forceMain) {
+               this.forceMain = forceMain;
+       }
        
 }

Modified: 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java?rev=708612&r1=708611&r2=708612&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/templating/TemplatingTest.java
 Tue Oct 28 10:17:03 2008
@@ -55,7 +55,7 @@
        }
 
        @Test
-       public void reusingTemplate() throws Exception {
+       public void notReusingTemplate() throws Exception {
                DefaultExpectations def = new DefaultExpectations() {{
                        one(session).getAttribute("__magma_lasttemplate"); 
will(returnValue(SimpleSecondTemplate.class));
                        one(session).setAttribute("user", "Simone");
@@ -67,9 +67,26 @@
                def.setupMinimal("/testSession/setUser");
                def.start();
                
-               assertStructure(def.out.toString(), "Second template");
+               assertStructure(def.out.toString(), "<div id=\"zoneMain", 
"ConvertedSessionHandler.doSetUser]", "<div id=\"zoneSide", 
"AuxiliaryWebHandler.doAuxSearch]", "AuxiliaryWebHandler.doAuxPoll]");
        }       
        
+       @Test
+       public void reusingTemplate() throws Exception {
+               DefaultExpectations def = new DefaultExpectations() {{
+                       one(session).getAttribute("__magma_lasttemplate"); 
will(returnValue(SimpleSecondTemplate.class));
+                       one(session).getAttribute("__magma_lastmain"); 
will(returnValue("/testSession/setUser"));
+                       one(session).setAttribute("user", "Simone");
+                       one(session).getAttribute("user"); 
will(returnValue("Massimo"));                                                
+               }};
+               UnitTestDispatch disp = new UnitTestDispatch();
+               disp.setTemplate(new SimpleTemplate());
+               def.disp = disp;
+               def.setupMinimal("/aux/auxPollResponse");
+               def.start();
+               
+               assertStructure(def.out.toString(), "Second template", "<div 
id=\"zoneMain", "ConvertedSessionHandler.doSetUser]", "<div id=\"zoneSide", 
"AuxiliaryWebHandler.doAuxPollResponse]");             
+       }
+       
 
        @Test
        public void simpleTemplateWithReplacedAuxiliary() throws Exception {

Modified: 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/SimpleSecondTemplate.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/SimpleSecondTemplate.java?rev=708612&r1=708611&r2=708612&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/SimpleSecondTemplate.java
 (original)
+++ 
labs/magma/trunk/foundation-website/src/test/java/org/apache/magma/website/teststuff/SimpleSecondTemplate.java
 Tue Oct 28 10:17:03 2008
@@ -9,6 +9,8 @@
                super.fileName = "second.html";
        }
 
-       
+       public void layoutSide() {
+               byDefault(AuxiliaryWebHandler.class, 
root().handleAux().doAuxPoll());
+       }       
        
 }

Modified: 
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/second.html
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/second.html?rev=708612&r1=708611&r2=708612&view=diff
==============================================================================
--- 
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/second.html
 (original)
+++ 
labs/magma/trunk/foundation-website/src/test/resources/org/apache/magma/website/teststuff/second.html
 Tue Oct 28 10:17:03 2008
@@ -21,5 +21,7 @@
     Second template
     <div id="zoneMain">
     </div>
+    <div id="zoneSide">
+    </div>    
   </body>
 </html>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to