incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From enor...@apache.org
Subject svn commit: r1098430 [2/4] - in /sling/trunk/samples: ./ accessmanager-ui/ accessmanager-ui/.settings/ accessmanager-ui/src/ accessmanager-ui/src/main/ accessmanager-ui/src/main/java/ accessmanager-ui/src/main/resources/ accessmanager-ui/src/main/resou...
Date Sun, 01 May 2011 22:46:49 GMT
Added: sling/trunk/samples/accessmanager-ui/src/main/resources/libs/sling/servlet/default/acl_body.html.esp
URL: http://svn.apache.org/viewvc/sling/trunk/samples/accessmanager-ui/src/main/resources/libs/sling/servlet/default/acl_body.html.esp?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/accessmanager-ui/src/main/resources/libs/sling/servlet/default/acl_body.html.esp (added)
+++ sling/trunk/samples/accessmanager-ui/src/main/resources/libs/sling/servlet/default/acl_body.html.esp Sun May  1 22:46:46 2011
@@ -0,0 +1,122 @@
+<%
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var privilegesInfo = new Packages.org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo();
+if (!privilegesInfo.canReadAccessControl(currentNode)) {
+   //user can't read the ACL.
+   response.sendError(403);
+} else {
+	if (!response.isCommitted()) {
+	    //don't allow caching of this page
+        response.setDateHeader("Expires", 0);
+        response.setHeader("Pragma", "no-cache");
+        response.setHeader("Cache-control", "no-cache, must-revalidate");
+    }
+	
+   var canModify = privilegesInfo.canModifyAccessControl(currentNode);
+   
+   var rb = request.getResourceBundle("org.apache.sling.accessmanager.Resources", null);
+   
+   function format(key, args) {
+      var value = rb.getString(key);
+ 	  return Packages.java.text.MessageFormat.format(value, args);
+   }
+%>
+
+<div class="ui-widget ui-widget-content ui-corner-all accessmgmt-body" id="update-acl-block" >
+<% if (canModify) { %>
+    <div id='modify-acl-header' class="ui-widget-header ui-corner-all ui-helper-clearfix">
+        <h3 class="accessmgmt-header"><%=format("header.update.acl", [currentNode.name])%></h3>
+        <span id="add-ace-block">
+            <a href="<%=request.contextPath%><%=resource.path%>.ace.html"><%=rb.getString("menu.link.add.ace")%></a>
+        </span>
+    </div>
+<% } else { /*end if(canModify) */ %>
+    <h3 class="ui-widget-header ui-corner-all accessmgmt-header"><%=format("header.view.acl", [currentNode.name])%></h3>
+<% } /* endelse */ %>
+
+<%
+   var accessMap = privilegesInfo.getDeclaredAccessRights(currentNode);
+   if (accessMap.isEmpty()) {
+%>
+    <div id="acl-list-empty" class="ui-corner-all ui-state-highlight"><%=rb.getString("msg.acl.empty")%></div>
+<% } else { %>
+   <table id="acl-list" width="100%" class="ui-widget ui-widget-content ui-corner-all">
+        <thead class="ui-widget-header">
+            <tr>
+                <th align="left"><%=rb.getString("column.authorizable.header")%></th>
+                <th align="left" width="125px"><%=rb.getString("column.privileges.header")%></th>
+                <th align="left" width="75px">&#160;</th>
+            </tr>
+        </thead>
+        <tbody>
+		<%
+		   var jcrSession = request.getResourceResolver().adaptTo(Packages.javax.jcr.Session);
+		   var userManager = Packages.org.apache.sling.jcr.base.util.AccessControlUtil.getUserManager(jcrSession);
+		
+		   var entrySet = accessMap.entrySet();
+		   var iterator = entrySet.iterator();
+		   while (iterator.hasNext()) {
+		      var entry = iterator.next();
+		      var principal = entry.getKey();
+		      var accessrights = entry.getValue();
+		
+		      var userDisplayName = principal.getName();
+		      var authorizable = userManager.getAuthorizable(principal.getName());
+		      if (authorizable) {
+		          var values = authorizable.getProperty("displayName");
+		          if (values != null && values.length > 0) {
+		              userDisplayName = values[0].getString();
+		          }
+		      }
+		%>
+            <tr>
+                <td>
+                    <a title='<%=rb.getString(canModify ? "menu.link.update.ace" : "menu.link.view.ace")%>' 
+                        href="<%=request.contextPath%><%=currentNode.path%>.ace.html?pid=<%=principal.getName()%>"><%=userDisplayName%></a>
+                </td>
+                <td width="125px">
+                    <%=accessrights.getPrivilegeSetDisplayName(request.locale)%>
+                </td>
+	            <td width="75px">
+	               <% if (canModify) { %>
+	                  <form method="post" 
+	                        action="<%=request.contextPath%><%=currentNode.path%>.deleteAce.html" >
+	                     <div>
+	                        <input type="hidden" name=":redirect" value="<%=request.contextPath%><%=currentNode.path%>.acl.html" />
+	                        <input type="hidden" name=":applyTo" value="<%=principal.getName()%>" />
+	                        <button class="remove-ace" type="submit">Delete</button>
+	                     </div>
+	                  </form>   
+	               <% } /* endif(canModify) */ %>
+	            </td>
+            </tr>
+<% } /* endwhile */ %>
+        </tbody>
+    </table>
+<% } /* endelse */%>
+</div>
+
+<% if (canModify) { %>
+<div id="remove-ace-dialog" title='<%=rb.getString("dialog.title.confirm.remove")%>' style="display:none">
+    <p>
+        <%=rb.getString("msg.ace.confirm.remove") %>
+    </p>
+</div>
+<% } /*endif(canModify) */ %>
+<% } /* end else (access check) */ %>

Modified: sling/trunk/samples/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/samples/pom.xml?rev=1098430&r1=1098429&r2=1098430&view=diff
==============================================================================
--- sling/trunk/samples/pom.xml (original)
+++ sling/trunk/samples/pom.xml Sun May  1 22:46:46 2011
@@ -68,5 +68,7 @@
           <module>slingbucks</module>
           <module>installing-dependencies</module>
           <module>framework-fragment</module>
+          <module>usermanager-ui</module>
+          <module>accessmanager-ui</module>
   </modules>
 </project>

Added: sling/trunk/samples/usermanager-ui/.classpath
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/.classpath?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/.classpath (added)
+++ sling/trunk/samples/usermanager-ui/.classpath Sun May  1 22:46:46 2011
@@ -0,0 +1,9 @@
+<classpath>
+  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="target/maven-shared-archive-resources" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="var" path="M2_REPO/javax/jcr/jcr/1.0/jcr-1.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-api/2.2.5/jackrabbit-api-2.2.5.jar"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+</classpath>
\ No newline at end of file

Propchange: sling/trunk/samples/usermanager-ui/.classpath
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/.project
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/.project?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/.project (added)
+++ sling/trunk/samples/usermanager-ui/.project Sun May  1 22:46:46 2011
@@ -0,0 +1,13 @@
+<projectDescription>
+  <name>org.apache.sling.samples.usermanager.ui</name>
+  <comment>Sample Sling UI for user management operations. NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
+  <projects/>
+  <buildSpec>
+    <buildCommand>
+      <name>org.eclipse.jdt.core.javabuilder</name>
+    </buildCommand>
+  </buildSpec>
+  <natures>
+    <nature>org.eclipse.jdt.core.javanature</nature>
+  </natures>
+</projectDescription>
\ No newline at end of file

Propchange: sling/trunk/samples/usermanager-ui/.project
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/.settings/org.eclipse.jdt.core.prefs?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/.settings/org.eclipse.jdt.core.prefs (added)
+++ sling/trunk/samples/usermanager-ui/.settings/org.eclipse.jdt.core.prefs Sun May  1 22:46:46 2011
@@ -0,0 +1,11 @@
+#Sun Apr 25 16:53:23 PDT 2010
+encoding//src/main/java=UTF-8
+encoding//target/scr-plugin-generated=UTF-8
+org.eclipse.jdt.core.compiler.compliance=1.5
+encoding//target/maven-shared-archive-resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding//src/main/resources=UTF-8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.source=1.5

Added: sling/trunk/samples/usermanager-ui/README.txt
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/README.txt?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/README.txt (added)
+++ sling/trunk/samples/usermanager-ui/README.txt Sun May  1 22:46:46 2011
@@ -0,0 +1,50 @@
+Sling user management UI sample
+---------------------
+
+WHY THIS SAMPLE?
+----------------
+This demonstrates some sample UI for user self-regirstration and profile update.
+
+HOW TO INSTALL
+--------------
+Build this bundle and install it in Sling.
+
+For example, if Sling is running on port 8080 (which happens if you start 
+the launchpad/testing module with "mvn jetty:run"), this will build and 
+install it:
+
+    mvn -P autoInstallBundle clean install -Dsling.url=http://localhost:8080/system/console
+    
+To verify that the bundle is correctly installed:
+
+1) http://localhost:8080/apps/espblog/html.esp must return the html.esp 
+   script.
+
+2) The console at http://localhost:8080/system/console/bundles must 
+    list the bundle named "Sling - ESP blog sample" as active.    
+
+HOW TO TEST
+-----------
+Start by logging in at http://localhost:8080/?sling:authRequestLogin=true,
+using username=admin and password=admin (or use the "login" link on the 
+/index.html page).
+
+Once logged in, /index.html should say "you are currently logged in as
+user "admin" to workspace "default".
+
+Then, http://localhost:8080/content/espblog/*.html should display the "Sling ESP
+blog sample" page, with the Home/Admin/New Post/... menu.
+
+If you get Sling's default HTML rendition instead ("Resource dumped by 
+HtmlRendererServlet") that's probably because the "path-based-rtp" bundle
+is not installed. Run the above "mvn...clean install" command in the
+sling/samples/path-based-rtp folder to install it, and reload the page.
+
+Create a new post using the "New Post" menu.
+
+The post can include an attachment, if that's an image the included
+ThumbnailGeneratorService generates thumbnails in different sizes, displayed
+on the post's page. This happens asynchronously, so depending on your 
+machine's speed the thumbnails might only appear after a few seconds.
+
+The ESP scripts are found under /apps/espblog in the repository.

Propchange: sling/trunk/samples/usermanager-ui/README.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/pom.xml?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/pom.xml (added)
+++ sling/trunk/samples/usermanager-ui/pom.xml Sun May  1 22:46:46 2011
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+  <!--
+    Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for
+    additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not
+    use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+    applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  
+  <parent>
+    <groupId>org.apache.sling</groupId>
+    <artifactId>sling</artifactId>
+    <version>9</version>
+    <relativePath>../../parent/pom.xml</relativePath>
+  </parent>
+   
+  <groupId>org.apache.sling.samples</groupId>
+  <artifactId>org.apache.sling.samples.usermanager.ui</artifactId>
+  <packaging>bundle</packaging>
+  <version>0.9-SNAPSHOT</version>
+  <name>Apache Sling User Manager UI sample</name>
+  <description>
+    Sample Sling UI for user manager operations.
+  </description>
+  
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/samples/usermanager-ui</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/samples/usermanager-ui</developerConnection>
+    <url>http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui</url>
+  </scm>
+
+  <pluginRepositories>
+    <!-- for yui-compressor-maven-plugin -->
+    <pluginRepository>
+      <name>oss.sonatype.org</name>
+      <id>oss.sonatype.org</id>
+      <url>http://oss.sonatype.org/content/groups/public</url>
+    </pluginRepository>
+  </pluginRepositories>
+  
+  <build>
+    <plugins>
+      <!--  use the yui-compressor to minify the js and css files -->
+      <plugin>
+        <groupId>net.alchim31.maven</groupId>
+        <artifactId>yuicompressor-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <phase>process-resources</phase>
+            <goals>
+              <goal>compress</goal>
+            </goals>
+          </execution>
+        </executions>        
+        <configuration>
+          <sourceDirectory>${basedir}/src/main/resources</sourceDirectory>
+          <outputDirectory>${basedir}/src/main/resources</outputDirectory>
+          <suffix>.min</suffix>
+          <excludes>
+            <exclude>**/*.min.*</exclude>
+          </excludes>
+          <!-- 
+          <aggregations>
+            <aggregation>
+              <insertNewLine>true</insertNewLine>
+              <output>${basedir}/src/main/resources/js/usermanager/usermanager.all.min.js</output>
+              <includes>
+                <include>jquery/jquery-1.5.1.min.js</include>
+                <include>jquery/jquery-ui-1.8.11.custom.min.js</include>
+                <include>jquery/jquery-validate/jquery.validate.min.js</include>
+                <include>usermanager.min.js</include>
+              </includes>
+            </aggregation>
+            <aggregation>
+              <insertNewLine>true</insertNewLine>
+              <output>${basedir}/src/main/resources/js/usermanager/usermanager.all.js</output>
+              <includes>
+                <include>jquery/jquery-1.5.1.min.js</include>
+                <include>jquery/jquery-ui-1.8.11.custom.min.js</include>
+                <include>jquery/jquery-validate/jquery.validate.js</include>
+                <include>usermanager.js</include>
+              </includes>
+            </aggregation>
+          </aggregations>
+           -->
+        </configuration>
+      </plugin>
+    
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-scr-plugin</artifactId>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Export-Package>
+                org.apache.sling.usermgr
+            </Export-Package>
+            <Sling-Bundle-Resources>
+                /images,
+                /css/usermanager,
+                /js/usermanager,
+                /libs/sling/group,
+                /libs/sling/groups,
+                /libs/sling/user,
+                /libs/sling/userManager,
+                /libs/sling/usermgmt,
+                /libs/sling/users
+            </Sling-Bundle-Resources>
+            <Sling-Initial-Content>
+                SLING-INF/i18n;overwrite:=false;uninstall:=false;path:=/etc/i18n/org.apache.sling.samples.usermanager.ui
+            </Sling-Initial-Content>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-javadoc-plugin</artifactId>
+        <configuration>
+          <excludePackageNames></excludePackageNames>
+        </configuration>
+      </plugin>
+    </plugins>
+  </reporting>
+  
+  <dependencies>
+    <dependency>
+        <groupId>org.apache.jackrabbit</groupId>
+        <artifactId>jackrabbit-api</artifactId>
+        <version>2.2.5</version>
+        <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.jcr</groupId>
+      <artifactId>jcr</artifactId>
+    </dependency>
+  </dependencies>  
+</project>

Propchange: sling/trunk/samples/usermanager-ui/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/src/main/java/org/apache/sling/usermgr/FindPeopleQuery.java
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/java/org/apache/sling/usermgr/FindPeopleQuery.java?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/src/main/java/org/apache/sling/usermgr/FindPeopleQuery.java (added)
+++ sling/trunk/samples/usermanager-ui/src/main/java/org/apache/sling/usermgr/FindPeopleQuery.java Sun May  1 22:46:46 2011
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.usermgr;
+
+import org.apache.jackrabbit.api.security.user.Group;
+import org.apache.jackrabbit.api.security.user.Query;
+import org.apache.jackrabbit.api.security.user.QueryBuilder;
+import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.api.security.user.QueryBuilder.Direction;
+
+/**
+ * Simple Query to find Users/Groups
+ */
+public class FindPeopleQuery implements Query {
+
+    private int searchType;
+    private String searchQuery;
+    private boolean isPrefixQuery;
+    private long offset;
+    private long maxResults;
+    
+    /**
+     * Constructor. The parameters specify what to query for. 
+     * 
+     * @param searchType the type to search for.  
+     *         One of: {@link UserManager#SEARCH_TYPE_USER}, {@link UserManager#SEARCH_TYPE_GROUP}
+     *           or {@link UserManager#SEARCH_TYPE_AUTHORIZABLE}
+     * @param searchQuery the term to search for
+     * @param isPrefixQuery true if this is a simple prefix query
+     * @param offset the offset to start the results from
+     * @param maxResults the maximum number of rows to retrieve
+     */
+    public FindPeopleQuery(int searchType, String searchQuery,
+            boolean isPrefixQuery, long offset, long maxResults) {
+        this.searchType = searchType;
+        this.searchQuery = searchQuery;
+        this.isPrefixQuery = isPrefixQuery;
+        this.offset = offset;
+        this.maxResults = maxResults;
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.jackrabbit.api.security.user.Query#build(org.apache.jackrabbit.api.security.user.QueryBuilder)
+     */
+    public <T> void build(QueryBuilder<T> builder) {
+        if (UserManager.SEARCH_TYPE_USER == searchType) {
+            builder.setSelector(User.class);
+        } else if (UserManager.SEARCH_TYPE_GROUP == searchType) {
+            builder.setSelector(Group.class);
+        }
+
+        //JCR-952: case-insensive sort needs jackrabbit 2.3+
+        // builder.setSortOrder("fn:lower-case(@rep:principalName)", Direction.ASCENDING);
+        builder.setSortOrder("@rep:principalName", Direction.ASCENDING);
+        builder.setLimit(offset, maxResults + 1); //max + 1 so we can tell if there are more on the next page
+        
+        String encodedTerm = encodeForLikeClause(searchQuery);
+        if (isPrefixQuery) {
+            String lcEncodedTerm = encodedTerm.toLowerCase();
+            //check for a case insensitive match in principalName
+            builder.setCondition(builder.or(builder.nameMatches(encodedTerm + "%"),
+                                            builder.nameMatches(lcEncodedTerm + "%"))
+                                );
+        } else {
+            //check for a match in the name or displayName
+            builder.setCondition(builder.or(builder.nameMatches("%" + encodedTerm + "%"),
+                                            builder.like("@displayName", "%" + encodedTerm + "%")));
+        }
+    }
+
+    /**
+     * Encodes the special characters of a term to provide a valid like clause
+     * @param rawValue the value to encode
+     * @return encoded value safe to use in a query like clause
+     */
+    static String encodeForLikeClause(String rawValue) {
+        if (rawValue == null || rawValue.length() == 0) {
+            return rawValue;
+        }
+        
+        char wrappingQuoteChar = '\'';
+        // encode
+        StringBuffer encoded = new StringBuffer();
+        for (int i = 0; i < rawValue.length(); i++) {
+               char c = rawValue.charAt(i);
+               if (c == '%' || c == '_' || c == '\\') {
+                   encoded.append('\\'); //escape the special character
+               } else if (c == wrappingQuoteChar) {
+                   encoded.append(c); //double up the character to match the literal quote character
+               }
+               if (c == '*') {
+                   //change the '*' wildcard to '%'
+                   encoded.append('%');
+               } else if (c == '?') {
+                   //change the '?' wildcard to '_'
+                   encoded.append('_');
+               } else {
+                   encoded.append(c);
+               }
+        }
+        return encoded.toString();
+    }
+}

Propchange: sling/trunk/samples/usermanager-ui/src/main/java/org/apache/sling/usermgr/FindPeopleQuery.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/src/main/resources/SLING-INF/i18n/resources.json
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/SLING-INF/i18n/resources.json?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/src/main/resources/SLING-INF/i18n/resources.json (added)
+++ sling/trunk/samples/usermanager-ui/src/main/resources/SLING-INF/i18n/resources.json Sun May  1 22:46:46 2011
@@ -0,0 +1,444 @@
+{
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+    "en": {
+        "jcr:mixinTypes": [
+            "mix:language"
+        ],
+        "jcr:language": "en",
+        "sling:basename": "org.apache.sling.usermgr.Resources",
+    
+        "page.template.title": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.template.title",
+            "sling:message": "{0} : Sling"
+        },            
+        "msg.noscript": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "msg.noscript",
+            "sling:message": "Your browser has scripting disabled.  Please enable scripting for a better experience."
+        },   
+    
+        "link.login": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "link.login",
+            "sling:message": "Login"
+        },            
+        "link.logout": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "link.logout",
+            "sling:message": "Logout"
+        },
+        "logo.alt": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "logo.alt",
+            "sling:message": "Apache Sling"
+        },
+        
+    
+        "page.title.update.group": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.update.group",
+            "sling:message": "Update Group"
+        },            
+    
+        "header.update.group": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "header.update.group",
+            "sling:message": "Update Group: {0}"
+        },            
+
+        "page.title.view.group": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.view.group",
+            "sling:message": "View Group"
+        },            
+    
+        "header.view.group": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "header.view.group",
+            "sling:message": "View Group: {0}"
+        },            
+        
+        "prop.label.email": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.email",
+            "sling:message": "E-Mail"
+        },            
+        "prop.label.displayName": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.displayName",
+            "sling:message": "Display Name"
+        },            
+        "prop.label.password": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.password",
+            "sling:message": "Password"
+        },            
+        "prop.label.confirmPassword": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.confirmPassword",
+            "sling:message": "Confirm Password"
+        },            
+        "prop.label.memberOf": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.memberOf",
+            "sling:message": "Member Of"
+        },            
+        "prop.label.declaredMembers": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.declaredMembers",
+            "sling:message": "Declared Members"
+        },            
+    
+        "button.save": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "button.save",
+            "sling:message": "Save"
+        },
+        "link.remove": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "link.remove",
+            "sling:message": "Remove"
+        },
+        "link.add.property": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "link.add.property",
+            "sling:message": "Add Property"
+        },
+        "link.add.member": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "link.add.member",
+            "sling:message": "Add Member"
+        },            
+        "tooltip.removeMember": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "tooltip.removeMember",
+            "sling:message": "Remove Member"
+        },
+    
+        "dialog.title.add.property": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "dialog.title.add.property",
+            "sling:message": "Add New Property"
+        },            
+        "label.property.name": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.property.name",
+            "sling:message": "Name"
+        },
+        
+        "dialog.title.confirm.remove": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "dialog.title.confirm.remove",
+            "sling:message": "Confirm Remove"
+        },            
+        "msg.group.confirm.remove": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "msg.group.confirm.remove",
+            "sling:message": "Are you sure you want to delete this group?"
+        },
+        
+        "dialog.title.add.member": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "dialog.title.add.member",
+            "sling:message": "Add Group Member"
+        },            
+        "label.group.name": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.group.name",
+            "sling:message": "Name"
+        },
+        
+      
+        
+        "page.title.find.groups": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.find.groups",
+            "sling:message": "Find Groups"
+        },            
+        "button.search": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "button.search",
+            "sling:message": "Search"
+        },
+        "label.column.name": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.column.name",
+            "sling:message": "Name"
+        },
+        "label.column.displayName": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.column.displayName",
+            "sling:message": "Display Name"
+        },
+        "msg.readyToSearch": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "msg.readyToSearch",
+            "sling:message": "Ready to Search"
+        },
+        "msg.noMatchesFound": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "msg.noMatchesFound",
+            "sling:message": "No Matches Found"
+        },
+    
+        "csv.quicksearch.items": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "csv.quicksearch.items",
+            "sling:message": "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"
+        },
+    
+        "quicksearch.label.all": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "quicksearch.label.all",
+            "sling:message": "All"
+        },
+        
+    
+        "page.title.create.group": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.create.group",
+            "sling:message": "Create Group"
+        },            
+        "prop.label.groupid": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.groupid",
+            "sling:message": "Group ID"
+        },
+        "prop.label.displayName": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.displayName",
+            "sling:message": "Display Name"
+        },
+        "button.create": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "button.create",
+            "sling:message": "Create"
+        },
+        
+        
+        
+        "page.title.update.user": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.update.user",
+            "sling:message": "Update User"
+        },            
+        "header.update.user": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "header.update.user",
+            "sling:message": "Update User: {0}"
+        },
+        "page.title.view.user": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.view.user",
+            "sling:message": "View User"
+        },            
+        "header.view.user": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "header.view.user",
+            "sling:message": "View User: {0}"
+        },
+                    
+        "msg.user.confirm.remove": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "msg.user.confirm.remove",
+            "sling:message": "Are you sure you want to delete this user?"
+        },
+        
+        "header.change.password": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "header.change.password",
+            "sling:message": "Change Password"
+        },
+        "prop.label.oldPwd": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.oldPwd",
+            "sling:message": "Old Password"
+        },
+        "prop.label.newPwd": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.newPwd",
+            "sling:message": "New Password"
+        },
+        "prop.label.newPwdConfirm": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.newPwdConfirm",
+            "sling:message": "Confirm Password"
+        },
+        "button.updatePwd": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "button.updatePwd",
+            "sling:message": "Update"
+        },
+
+        "csv.static.group.prop.keys": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "csv.static.group.prop.keys",
+            "sling:message": "displayName"
+        },
+        "csv.static.user.prop.keys": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "csv.static.user.prop.keys",
+            "sling:message": "displayName,email"
+        },
+        
+        
+        "tooltip.removeProperty": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "tooltip.removeProperty",
+            "sling:message": "Remove Property"
+        },
+    
+        
+        
+        "menu.link.authorizables": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.authorizables",
+            "sling:message": "Authorizables"
+        },            
+        "menu.link.users": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.users",
+            "sling:message": "Users"
+        },            
+        "menu.link.groups": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.groups",
+            "sling:message": "Groups"
+        },            
+        "menu.link.createUser": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.createUser",
+            "sling:message": "Create User"
+        },            
+        "menu.link.createGroup": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.createGroup",
+            "sling:message": "Create Group"
+        },
+        "menu.link.updateUser": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.updateUser",
+            "sling:message": "Update User"
+        },
+        "menu.link.updateGroup": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.updateGroup",
+            "sling:message": "Update Group"
+        },
+        "menu.link.viewUser": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.viewUser",
+            "sling:message": "View User"
+        },
+        "menu.link.viewGroup": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "menu.link.viewGroup",
+            "sling:message": "View Group"
+        },
+
+        "page.title.find.authorizables": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.find.authorizables",
+            "sling:message": "Find Authorizables"
+        },            
+    
+        
+        "page.title.find.users": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.find.users",
+            "sling:message": "Find Users"
+        },            
+        
+        "page.title.create.user": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "page.title.create.user",
+            "sling:message": "Create User"
+        },            
+        "prop.label.userid": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.userid",
+            "sling:message": "User ID"
+        },
+        "prop.label.email": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.email",
+            "sling:message": "E-Mail"
+        },
+        "prop.label.pwd": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.pwd",
+            "sling:message": "Password"
+        },
+        "prop.label.pwdConfirm": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "prop.label.pwdConfirm",
+            "sling:message": "Confirm Password"
+        },
+        
+        "declaredMembers.empty": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "declaredMembers.empty",
+            "sling:message": "No Members"
+        },
+        "memberOf.empty": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "memberOf.empty",
+            "sling:message": "No Groups"
+        },
+        
+        
+        
+        "paging.current.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "paging.current.page",
+            "sling:message": "{0} to {1}"
+        },
+        "label.paging.first.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.paging.first.page",
+            "sling:message": "|<"
+        },
+        "label.paging.prev.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.paging.prev.page",
+            "sling:message": "<<"
+        },
+        "label.paging.next.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "label.paging.next.page",
+            "sling:message": ">>"
+        },
+        "tooltip.paging.first.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "tooltip.paging.first.page",
+            "sling:message": "First Page"
+        },
+        "tooltip.paging.prev.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "tooltip.paging.prev.page",
+            "sling:message": "Previous Page"
+        },
+        "tooltip.paging.next.page": {
+            "jcr:primaryType": "sling:MessageEntry",
+            "sling:key": "tooltip.paging.next.page",
+            "sling:message": "Next Page"
+        }
+        
+    }
+}

Added: sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.css
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.css?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.css (added)
+++ sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.css Sun May  1 22:46:46 2011
@@ -0,0 +1,444 @@
+/*!
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+body {
+    background-color: #ffffff;
+    color: #3b3b3b;
+    font-family: Tahoma, Arial, sans-serif;
+    font-size: 10pt;
+    line-height: 140%;
+    margin: 0;
+    padding: 0;
+}
+
+a {
+    color: #1980af;
+    text-decoration: none;
+}
+
+a:visited {
+    color: #1980af;
+}
+
+a:hover {
+    color: #1faae9;
+    text-decoration: underline;
+}
+
+img, a img
+{
+    border: none;
+}
+
+.title {
+    position: absolute;
+    left: 1px;
+    right: 1px;
+    top: 25px;
+    height: 81px;
+    background: url(../../images/gradient.png)
+        repeat-x;
+    background-position: bottom;
+}
+
+.logo {
+    position: absolute;
+    width: 15em;
+    height: 81px;
+    text-align: center;
+}
+
+.header {
+    text-align: right;
+    margin-right: 20pt;
+}
+
+.menu {
+    border-top: 10px solid #f9bb00;
+    position: absolute;
+    top: 107px;
+    left: 1px;
+    width: 15em;
+    bottom: 0px;
+    padding: 0px;
+    background-color: #fcfcfc
+}
+
+.menu ul {
+    background-color: #fdf5d9;
+    list-style: none;
+    padding-left: 0px;
+    margin-top: 0px;
+    padding-top: 2em;
+    padding-bottom: 2em;
+    margin-left: 0px;
+    color: #4a4a43
+}
+
+.menu ul li {
+    padding-left: 4em;
+    padding-top: 2px;
+    padding-bottom: 2px;    
+}
+
+.menu ul li.ui-state-highlight {
+    font-weight: bold;
+}
+
+.menu a {
+    color: #4a4a43
+}
+
+.main {
+    position: absolute;
+    border-top: 10px solid #cde0ea;
+    top: 107px;
+    left: 15em;
+    right: 1px;
+    margin-left: 2px;
+    padding: 10px 10px;
+}
+
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- Login/Logout Links  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+
+#menu_login
+{
+    display: inline;
+    margin: 10px 20px;
+    font-size: 11px;
+    padding: 5px 7px;
+    position: absolute;
+    right: 0;
+    top: 0;
+    z-index: 10;
+}
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- User Manager Pages  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+
+.usermgmt-body 
+{
+    padding: 5px;
+}
+
+.usermgmt-header 
+{
+    font-size: 14px;
+    padding: 5px 10px;
+    margin: 0 0 10px 0;
+}
+
+.info-msg-block
+{
+    margin-left: 10px; 
+    margin-right: 10px;
+    margin-bottom: 10px;
+}
+.info-msg-block p 
+{
+    margin: 5px;
+}
+.info-msg-block span.ui-icon 
+{
+    float: left;    
+}
+.info-msg-text
+{
+    margin-left: 5px;
+}
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- User/Group Search Pages  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+
+#find-authorizables-form fieldset
+{
+    border: none;
+    margin: 0;
+    padding: 0;
+    line-height: 20px;
+}
+
+.search-empty-msg {
+    line-height: 100px;
+    font-size: large;
+    font-weight: bold;
+    text-align: center;
+}
+
+#authorizables-body
+{    
+    min-width: 750px;   
+}
+
+#find-authorizables-quick-nav
+{
+    padding: 2px 4px;
+}
+
+#authorizables-results-body
+{
+    margin-top: 5px;
+}
+
+#find-authorizables-quick-nav label
+{
+    width: auto;
+    padding: 3px 5px;
+}
+
+#find-authorizables-quick-nav .ui-button-text-only .ui-button-text
+{
+    line-height: 1;
+    padding: 3px 3px;
+    font-size: 10pt;        
+}
+#find-authorizables-block .ui-button-text-only .ui-button-text
+{
+    line-height: 1;
+    padding: 5px 5px;
+    font-size: 10pt;        
+}
+
+#search-result-paging .ui-button-text-only .ui-button-text
+{
+    line-height: 1;
+    font-size: 10pt;        
+}
+#search-result-paging span#current_page {
+    margin-left: 6px;
+    margin-right: 6px;
+}
+
+#find-authorizables-block
+{
+    float: right;
+    line-height: 33px; 
+    padding-right: 10px;
+}
+
+#find-authorizables-block input
+{
+    padding: 0 4px;
+    font-size: 10pt;        
+}
+
+#search-result td,
+#search-result th
+{
+    padding: 5px;
+}
+
+#search-result tr.odd
+{
+    background-color: #eee;
+}
+
+#find-authorizables-header
+{
+    margin-bottom: 5px;   
+}
+
+#find-authorizables-header h3
+{
+    font-size: 14px; 
+    font-weight: bold; 
+    display: inline; 
+    line-height: 33px; 
+}
+
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- Create User/Group Pages  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+
+#create-user-form,
+#create-group-form
+{
+    margin: 0px;
+    padding: 0px;
+}
+
+#create-user-form fieldset,
+#create-group-form fieldset
+{
+    border: none;
+    margin: 0;
+    padding: 0;
+    line-height: 20px;
+}
+
+#create-user-form label,
+#create-group-form label
+{
+    float: left;
+    display: inline;
+    width: 15%;
+    text-align: right;
+}
+
+#create-user-form input,
+#create-group-form input
+{
+    margin-left: 10px;
+    width: 75%;
+}
+
+#create-user-form button,
+#create-group-form button
+{
+    margin-left: 10px;
+}
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- Update User/Group Pages  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+
+#update-user-form,
+#update-password-form,
+#update-group-form
+{
+    margin: 0px;
+    padding: 0px;
+}
+
+#update-user-form fieldset,
+#update-password-form fieldset,
+#update-group-form fieldset,
+#remove-user-form fieldset,
+#remove-group-form fieldset,
+#add-property-form fieldset,
+#add-group-member-form fieldset
+{
+    border: none;
+    margin: 0;
+    padding: 0;
+    line-height: 20px;
+}
+
+#update-user-form label,
+#update-password-form label, 
+#update-group-form label, 
+#add-property-form label,
+#add-group-member-form label
+{
+    float: left;
+    display: inline;
+    width: 15%;
+    text-align: right;
+}
+
+#update-user-form input,
+#update-password-form input, 
+#update-group-form input, 
+#add-property-form input,
+#add-group-member-form input
+{
+    margin-left: 10px;
+    width: 75%;
+}
+
+#update-user-form button,
+#update-password-form button, 
+#update-group-form button 
+{
+    margin-left: 10px;
+}
+
+#update-user-form ol, 
+#update-group-form ol
+{
+    float: left;
+    display: inline;
+    width: 65%;
+    margin: 0 5px 0 10px;
+    padding-left: 0;
+    list-style-position: inside;
+    list-style-type: none;
+}
+
+#update-password-body 
+{
+    margin-top: 10px;
+}
+    
+#update-password-form label 
+{
+    width: 15%;
+    text-align: right;
+}
+
+#update-password-form input 
+{
+    margin-left: 10px;
+    width: 75%;
+}
+
+#update-password-form button 
+{
+    margin-left: 10px;
+}
+
+.prop-line 
+{
+    margin-bottom: 5px;
+    line-height: 26px;
+}
+
+.prop-line .remove-property, 
+.prop-line .remove-member 
+{
+    position: absolute;
+    margin: 5px 5px;
+}
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- Widget style tweaks  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+
+.ui-autocomplete-loading 
+{ 
+    background: white url('../../images/ui-anim_basic_16x16.gif') right center no-repeat; 
+}
+
+.noscript-hide 
+{
+    display:none;
+}
+
+
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+/* --- Validation error styles  ---*/
+/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
+input.error, textarea.error 
+{
+    border: 1px dotted red;
+}
+
+label.error, label.error 
+{
+    color: red;
+    font-style: italic;
+    font-weight: bold;
+    margin-left: 15%;
+    padding-left: 10px;
+    text-align: left !important;
+    width: auto !important;
+}
\ No newline at end of file

Propchange: sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.css
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.min.css
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.min.css?rev=1098430&view=auto
==============================================================================
--- sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.min.css (added)
+++ sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.min.css Sun May  1 22:46:46 2011
@@ -0,0 +1,58 @@
+/*!* Licensed to the Apache Software Foundation(ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License,Version 2.0 *(the "License");you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing,software * distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ body{background-color:#fff;color:#3b3b3b;font-family:Tahoma,Arial,sans-serif;font-size:10pt;line-height:140%;margin:0;padding:0;}
+a{color:#1980af;text-decoration:none;}
+a:visited{color:#1980af;}
+a:hover{color:#1faae9;text-decoration:underline;}
+img,a img{border:none;}
+.title{position:absolute;left:1px;right:1px;top:25px;height:81px;background:url(../../images/gradient.png) repeat-x;background-position:bottom;}
+.logo{position:absolute;width:15em;height:81px;text-align:center;}
+.header{text-align:right;margin-right:20pt;}
+.menu{border-top:10px solid #f9bb00;position:absolute;top:107px;left:1px;width:15em;bottom:0;padding:0;background-color:#fcfcfc;}
+.menu ul{background-color:#fdf5d9;list-style:none;padding-left:0;margin-top:0;padding-top:2em;padding-bottom:2em;margin-left:0;color:#4a4a43;}
+.menu ul li{padding-left:4em;padding-top:2px;padding-bottom:2px;}
+.menu ul li.ui-state-highlight{font-weight:bold;}
+.menu a{color:#4a4a43;}
+.main{position:absolute;border-top:10px solid #cde0ea;top:107px;left:15em;right:1px;margin-left:2px;padding:10px 10px;}
+#menu_login{display:inline;margin:10px 20px;font-size:11px;padding:5px 7px;position:absolute;right:0;top:0;z-index:10;}
+.usermgmt-body{padding:5px;}
+.usermgmt-header{font-size:14px;padding:5px 10px;margin:0 0 10px 0;}
+.info-msg-block{margin-left:10px;margin-right:10px;margin-bottom:10px;}
+.info-msg-block p{margin:5px;}
+.info-msg-block span.ui-icon{float:left;}
+.info-msg-text{margin-left:5px;}
+#find-authorizables-form fieldset{border:none;margin:0;padding:0;line-height:20px;}
+.search-empty-msg{line-height:100px;font-size:large;font-weight:bold;text-align:center;}
+#authorizables-body{min-width:750px;}
+#find-authorizables-quick-nav{padding:2px 4px;}
+#authorizables-results-body{margin-top:5px;}
+#find-authorizables-quick-nav label{width:auto;padding:3px 5px;}
+#find-authorizables-quick-nav .ui-button-text-only .ui-button-text{line-height:1;padding:3px 3px;font-size:10pt;}
+#find-authorizables-block .ui-button-text-only .ui-button-text{line-height:1;padding:5px 5px;font-size:10pt;}
+#search-result-paging .ui-button-text-only .ui-button-text{line-height:1;font-size:10pt;}
+#search-result-paging span#current_page{margin-left:6px;margin-right:6px;}
+#find-authorizables-block{float:right;line-height:33px;padding-right:10px;}
+#find-authorizables-block input{padding:0 4px;font-size:10pt;}
+#search-result td,#search-result th{padding:5px;}
+#search-result tr.odd{background-color:#eee;}
+#find-authorizables-header{margin-bottom:5px;}
+#find-authorizables-header h3{font-size:14px;font-weight:bold;display:inline;line-height:33px;}
+#create-user-form,#create-group-form{margin:0;padding:0;}
+#create-user-form fieldset,#create-group-form fieldset{border:none;margin:0;padding:0;line-height:20px;}
+#create-user-form label,#create-group-form label{float:left;display:inline;width:15%;text-align:right;}
+#create-user-form input,#create-group-form input{margin-left:10px;width:75%;}
+#create-user-form button,#create-group-form button{margin-left:10px;}
+#update-user-form,#update-password-form,#update-group-form{margin:0;padding:0;}
+#update-user-form fieldset,#update-password-form fieldset,#update-group-form fieldset,#remove-user-form fieldset,#remove-group-form fieldset,#add-property-form fieldset,#add-group-member-form fieldset{border:none;margin:0;padding:0;line-height:20px;}
+#update-user-form label,#update-password-form label,#update-group-form label,#add-property-form label,#add-group-member-form label{float:left;display:inline;width:15%;text-align:right;}
+#update-user-form input,#update-password-form input,#update-group-form input,#add-property-form input,#add-group-member-form input{margin-left:10px;width:75%;}
+#update-user-form button,#update-password-form button,#update-group-form button{margin-left:10px;}
+#update-user-form ol,#update-group-form ol{float:left;display:inline;width:65%;margin:0 5px 0 10px;padding-left:0;list-style-position:inside;list-style-type:none;}
+#update-password-body{margin-top:10px;}
+#update-password-form label{width:15%;text-align:right;}
+#update-password-form input{margin-left:10px;width:75%;}
+#update-password-form button{margin-left:10px;}
+.prop-line{margin-bottom:5px;line-height:26px;}
+.prop-line .remove-property,.prop-line .remove-member{position:absolute;margin:5px 5px;}
+.ui-autocomplete-loading{background:white url('../../images/ui-anim_basic_16x16.gif') right center no-repeat;}
+.noscript-hide{display:none;}
+input.error,textarea.error{border:1px dotted red;}
+label.error,label.error{color:red;font-style:italic;font-weight:bold;margin-left:15%;padding-left:10px;text-align:left!important;width:auto!important;}
\ No newline at end of file

Propchange: sling/trunk/samples/usermanager-ui/src/main/resources/css/usermanager/usermanager.min.css
------------------------------------------------------------------------------
    svn:eol-style = native

Added: sling/trunk/samples/usermanager-ui/src/main/resources/images/ajax-loader.gif
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/images/ajax-loader.gif?rev=1098430&view=auto
==============================================================================
Binary file - no diff available.

Propchange: sling/trunk/samples/usermanager-ui/src/main/resources/images/ajax-loader.gif
------------------------------------------------------------------------------
    svn:mime-type = image/gif

Added: sling/trunk/samples/usermanager-ui/src/main/resources/images/gradient.png
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/images/gradient.png?rev=1098430&view=auto
==============================================================================
Binary file - no diff available.

Propchange: sling/trunk/samples/usermanager-ui/src/main/resources/images/gradient.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: sling/trunk/samples/usermanager-ui/src/main/resources/images/sling-logo.png
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/images/sling-logo.png?rev=1098430&view=auto
==============================================================================
Binary file - no diff available.

Propchange: sling/trunk/samples/usermanager-ui/src/main/resources/images/sling-logo.png
------------------------------------------------------------------------------
    svn:mime-type = image/png

Added: sling/trunk/samples/usermanager-ui/src/main/resources/images/ui-anim_basic_16x16.gif
URL: http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/src/main/resources/images/ui-anim_basic_16x16.gif?rev=1098430&view=auto
==============================================================================
Binary file - no diff available.

Propchange: sling/trunk/samples/usermanager-ui/src/main/resources/images/ui-anim_basic_16x16.gif
------------------------------------------------------------------------------
    svn:mime-type = image/gif



Mime
View raw message