You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2014/10/10 10:52:18 UTC

svn commit: r1630737 - in /sling/trunk/samples/slingshot/src/main: java/org/apache/sling/sample/slingshot/ java/org/apache/sling/sample/slingshot/impl/ resources/SLING-INF/content/libs/slingshot/Item/

Author: cziegeler
Date: Fri Oct 10 08:52:17 2014
New Revision: 1630737

URL: http://svn.apache.org/r1630737
Log:
Correct commenting component and add rating component

Modified:
    sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotConstants.java
    sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotUtil.java
    sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/CommentPostServlet.java
    sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/RatingPostServlet.java
    sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/Util.java
    sling/trunk/samples/slingshot/src/main/resources/SLING-INF/content/libs/slingshot/Item/html.jsp

Modified: sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotConstants.java
URL: http://svn.apache.org/viewvc/sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotConstants.java?rev=1630737&r1=1630736&r2=1630737&view=diff
==============================================================================
--- sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotConstants.java (original)
+++ sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotConstants.java Fri Oct 10 08:52:17 2014
@@ -54,7 +54,9 @@ public abstract class SlingshotConstants
 
     public static final String PROPERTY_TAGS = "tags";
 
-    public static final String PROPERTY_USER = "jcr:createdBy";
+    public static final String PROPERTY_USER = "user";
 
     public static final String PROPERTY_CREATED = "jcr:created";
+
+    public static final String PROPERTY_RATING = "rating";
 }

Modified: sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotUtil.java?rev=1630737&r1=1630736&r2=1630737&view=diff
==============================================================================
--- sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotUtil.java (original)
+++ sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/SlingshotUtil.java Fri Oct 10 08:52:17 2014
@@ -16,7 +16,15 @@
  */
 package org.apache.sling.sample.slingshot;
 
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.sling.api.resource.ModifiableValueMap;
+import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.resource.ValueMap;
 
 public abstract class SlingshotUtil {
 
@@ -37,4 +45,53 @@ public abstract class SlingshotUtil {
         }
         return id;
     }
+
+    public static int getRating(final Resource resource) {
+        int rating = 0;
+
+        final Resource ratingsResource = resource.getChild("ratings");
+        if ( ratingsResource != null ) {
+            int count = 0;
+            for(final Resource r : ratingsResource.getChildren()) {
+                final ValueMap vm = r.getValueMap();
+                final int current = vm.get(SlingshotConstants.PROPERTY_RATING, 0);
+                rating += current;
+                count++;
+            }
+            if ( count > 0 ) {
+                rating = rating / count;
+            }
+        }
+        return rating;
+    }
+
+    public static int getOwnRating(final Resource resource, final String userId) {
+        int rating = 0;
+
+        final Resource r = resource.getResourceResolver().getResource(resource.getParent() + "/ratings/" + userId);
+        if ( r != null ) {
+            final ValueMap vm = r.getValueMap();
+            rating = vm.get(SlingshotConstants.PROPERTY_RATING, 0);
+        }
+        return rating;
+
+    }
+
+    public static void setOwnRating(final Resource resource, final String userId, final int rating)
+    throws PersistenceException {
+        final Map<String, Object> props = new HashMap<String, Object>();
+        props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, SlingshotConstants.RESOURCETYPE_RATINGS);
+        final Resource ratingsResource = ResourceUtil.getOrCreateResource(resource.getResourceResolver(),
+                resource.getPath() + "/ratings", props, null, true);
+
+        props.clear();
+        props.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, SlingshotConstants.RESOURCETYPE_RATING);
+        final Resource r = ResourceUtil.getOrCreateResource(resource.getResourceResolver(),
+                ratingsResource.getPath() + "/" + userId, props, null, false);
+
+        final ModifiableValueMap mv = r.adaptTo(ModifiableValueMap.class);
+        mv.put(SlingshotConstants.PROPERTY_RATING, rating);
+
+        r.getResourceResolver().commit();
+    }
 }

Modified: sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/CommentPostServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/CommentPostServlet.java?rev=1630737&r1=1630736&r2=1630737&view=diff
==============================================================================
--- sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/CommentPostServlet.java (original)
+++ sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/CommentPostServlet.java Fri Oct 10 08:52:17 2014
@@ -58,19 +58,19 @@ public class CommentPostServlet extends 
 
         final String userId = request.getRemoteUser();
 
+        logger.debug("New comment from {} : {} - {}", new Object[] {userId, title, description});
         // TODO - check values
 
         // save comment
         ResourceResolver resolver = null;
         try {
-            final Map<String, Object> loginmap = new HashMap<String, Object>();
-            loginmap.put(ResourceResolverFactory.USER_IMPERSONATION, userId);
-            resolver = factory.getAdministrativeResourceResolver(loginmap);
+            resolver = factory.getAdministrativeResourceResolver(null);
 
             final Map<String, Object> properties = new HashMap<String, Object>();
             properties.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, SlingshotConstants.RESOURCETYPE_COMMENT);
             properties.put(SlingshotConstants.PROPERTY_TITLE, title);
             properties.put(SlingshotConstants.PROPERTY_DESCRIPTION, description);
+            properties.put(SlingshotConstants.PROPERTY_USER, userId);
 
             // we try it five times
             PersistenceException exception = null;

Modified: sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/RatingPostServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/RatingPostServlet.java?rev=1630737&r1=1630736&r2=1630737&view=diff
==============================================================================
--- sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/RatingPostServlet.java (original)
+++ sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/RatingPostServlet.java Fri Oct 10 08:52:17 2014
@@ -17,8 +17,7 @@
 package org.apache.sling.sample.slingshot.impl;
 
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
+import java.io.PrintWriter;
 
 import javax.servlet.ServletException;
 
@@ -31,6 +30,7 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.sample.slingshot.SlingshotConstants;
+import org.apache.sling.sample.slingshot.SlingshotUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,28 +48,18 @@ public class RatingPostServlet extends S
     protected void doPost(final SlingHttpServletRequest request,
             final SlingHttpServletResponse response)
     throws ServletException, IOException {
-        final String title = request.getParameter(SlingshotConstants.PROPERTY_TITLE);
-        final String description = request.getParameter(SlingshotConstants.PROPERTY_DESCRIPTION);
+        final String rating = request.getParameter(SlingshotConstants.PROPERTY_RATING);
 
         final String userId = request.getRemoteUser();
 
-        // TODO - check values
+        logger.info("New rating from {} : {}", userId, rating);
 
         // save comment
         ResourceResolver resolver = null;
         try {
-            final Map<String, Object> loginmap = new HashMap<String, Object>();
-            loginmap.put(ResourceResolverFactory.USER_IMPERSONATION, userId);
-            resolver = factory.getAdministrativeResourceResolver(loginmap);
-
-            final Map<String, Object> properties = new HashMap<String, Object>();
-            properties.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, SlingshotConstants.RESOURCETYPE_COMMENT);
-            properties.put(SlingshotConstants.PROPERTY_TITLE, title);
-            properties.put(SlingshotConstants.PROPERTY_DESCRIPTION, description);
+            resolver = factory.getAdministrativeResourceResolver(null);
 
-            resolver.create(request.getResource(), "bla", properties);
-
-            resolver.commit();
+            SlingshotUtil.setOwnRating(request.getResource().getParent(), userId, Integer.valueOf(rating));
         } catch ( final LoginException le ) {
             throw new ServletException("Unable to login", le);
         } finally {
@@ -78,10 +68,15 @@ public class RatingPostServlet extends S
             }
         }
 
-        // send redirect at the end
-        final String path = request.getResource().getParent().getPath();
-
-        response.sendRedirect(request.getContextPath() + path + ".html");
+        response.setContentType("application/json");
+        response.setCharacterEncoding("utf-8");
+        response.setStatus(200);
+
+        final PrintWriter pw = response.getWriter();
+        pw.print("{ ");
+        pw.print(" \"rating\" : ");
+        pw.print(String.valueOf(SlingshotUtil.getRating(request.getResource().getParent())));
+        pw.println("}");
     }
 
 }

Modified: sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/Util.java
URL: http://svn.apache.org/viewvc/sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/Util.java?rev=1630737&r1=1630736&r2=1630737&view=diff
==============================================================================
--- sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/Util.java (original)
+++ sling/trunk/samples/slingshot/src/main/java/org/apache/sling/sample/slingshot/impl/Util.java Fri Oct 10 08:52:17 2014
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.sample.slingshot.impl;
 
+
 public abstract class Util {
 
     private static final String ALLOWED_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789_";
@@ -51,4 +52,6 @@ public abstract class Util {
 
         return sb.toString();
     }
+
+
 }

Modified: sling/trunk/samples/slingshot/src/main/resources/SLING-INF/content/libs/slingshot/Item/html.jsp
URL: http://svn.apache.org/viewvc/sling/trunk/samples/slingshot/src/main/resources/SLING-INF/content/libs/slingshot/Item/html.jsp?rev=1630737&r1=1630736&r2=1630737&view=diff
==============================================================================
--- sling/trunk/samples/slingshot/src/main/resources/SLING-INF/content/libs/slingshot/Item/html.jsp (original)
+++ sling/trunk/samples/slingshot/src/main/resources/SLING-INF/content/libs/slingshot/Item/html.jsp Fri Oct 10 08:52:17 2014
@@ -45,20 +45,52 @@
     <sling:include resource="<%= resource %>" replaceSelectors="trail"/>
     <h1><%= title %></h1>
     <div style="width:100%; display:block; float:left;">
-    <div style="width:70%; float:left; display:block;">
+      <div style="width:70%; float:left; display:block;">
         <img src="<%= request.getContextPath() %><%= imagePath %>"/>
-    </div>
-    <div style="width:30%; float:left; padding:15px; display:block;">
+      </div>
+      <div style="width:30%; float:left; padding:15px; display:block;">
         <p><%=ResponseUtil.escapeXml(attributes.get(SlingshotConstants.PROPERTY_DESCRIPTION, ""))%></p>
         <% if ( attributes.get(SlingshotConstants.PROPERTY_LOCATION) != null ) { %>
             <p>Location</p>
             <p><%=ResponseUtil.escapeXml(attributes.get(SlingshotConstants.PROPERTY_LOCATION, ""))%></p>
         <% } %>
-       <% if ( slingRequest.getRemoteUser() != null && slingRequest.getRemoteUser().equals(SlingshotUtil.getUserId(resource)) )  { %>
+        <% if ( slingRequest.getRemoteUser() != null && slingRequest.getRemoteUser().equals(SlingshotUtil.getUserId(resource)) )  { %>
         <button class="ui-button ui-form-button ui-slingshot-clickable" 
                 data-link="<%= request.getContextPath() %><%=resource.getName() %>.edit.html" type="button">Edit</button>
-       <% } %>
-    </div>
+        <% } %>
+        <div class="metro">
+          <div id="rating" 
+               data-score-hint="Rating: " 
+               data-show-score="true" 
+               data-role="rating" 
+               data-stars="5" 
+               data-score="<%= SlingshotUtil.getRating(resource) %>" 
+               data-static="false" 
+               class="rating large" style="height: auto;">
+               <ul><li></li><li></li><li></li><li></li><li></li></ul>
+               <span class="score-hint">Rating: <%= SlingshotUtil.getRating(resource) %></span>
+          </div>
+          <div class="fg-green rating active" id="own_rating" style="height: auto;">
+          <ul><li title="bad" class="rated"></li><li title="poor"></li><li title="regular"></li><li title="good"></li><li title="gorgeous"></li></ul><span class="score-hint">Current score: <%= SlingshotUtil.getOwnRating(resource, request.getRemoteUser()) %></span></div>
+                    <script>
+                        $(function(){
+                            $("#own_rating").rating({
+                                static: false,
+                                score: <%= SlingshotUtil.getOwnRating(resource, request.getRemoteUser()) %>,
+                                stars: 5,
+                                showHint: true,
+                                showScore: true,
+                                click: function(value, rating) {
+                                    rating.rate(value);
+                                	$.post( "<%= resource.getName() %>/ratings", { <%= SlingshotConstants.PROPERTY_RATING %> : value }, function( data ) {
+                                		  $("#rating").rating("rate", data.rating);
+                                		}, "json");
+                                }
+                            });
+                        });
+                    </script>
+        </div>
+      </div>
     </div>
     <hr/>
     <sling:include resource="<%= resource %>" replaceSelectors="comments"/>