Author: bblfish
Date: Sun May 22 00:37:36 2011
New Revision: 1125848

URL: http://svn.apache.org/viewvc?rev=1125848&view=rev
Log:
Generalised the profile browser so that it can be useful for remote users 
without accounts. CLEREZZA-516. This is perhaps the most basic linked data app 
one can havea. Users with an account will be able to add contacts as they 
browser the network.

Added:
    
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/FoafBrowser.scala
      - copied, changed from r1125847, 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala
Removed:
    
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala
Modified:
    
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/resources/OSGI-INF/serviceComponents.xml
    
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala
    
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala

Modified: 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/resources/OSGI-INF/serviceComponents.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/resources/OSGI-INF/serviceComponents.xml?rev=1125848&r1=1125847&r2=1125848&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/resources/OSGI-INF/serviceComponents.xml
 (original)
+++ 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/resources/OSGI-INF/serviceComponents.xml
 Sun May 22 00:37:36 2011
@@ -63,13 +63,13 @@
         <property name="service.pid" 
value="org.apache.clerezza.platform.accountcontrolpanel.pages.profile_panel"/>
     </scr:component>
 
-       <scr:component enabled="true" 
name="org.apache.clerezza.platform.accountcontrolpanel.PersonPanel">
-               <implementation 
class="org.apache.clerezza.platform.accountcontrolpanel.PersonPanel"/>
+       <scr:component enabled="true" 
name="org.apache.clerezza.platform.accountcontrolpanel.FoafBrowser">
+               <implementation 
class="org.apache.clerezza.platform.accountcontrolpanel.FoafBrowser"/>
                <service servicefactory="false">
                        <provide interface="java.lang.Object"/>
                </service>
                <property name="javax.ws.rs" type="Boolean" value="true"/>
-               <property name="service.pid" 
value="org.apache.clerezza.platform.accountcontrolpanel.PersonPanel"/>
+               <property name="service.pid" 
value="org.apache.clerezza.platform.accountcontrolpanel.FoafBrowser"/>
         <reference name="tcManager" 
interface="org.apache.clerezza.rdf.core.access.TcManager"
                    cardinality="1..1" policy="static" bind="bindTcManager" 
unbind="unbindTcManager"/>
        </scr:component>

Copied: 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/FoafBrowser.scala
 (from r1125847, 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala)
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/FoafBrowser.scala?p2=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/FoafBrowser.scala&p1=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala&r1=1125847&r2=1125848&rev=1125848&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala
 (original)
+++ 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/FoafBrowser.scala
 Sun May 22 00:37:36 2011
@@ -7,7 +7,7 @@
  * "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
+ *    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
@@ -16,6 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.clerezza.platform.accountcontrolpanel
 
 import org.apache.clerezza.platform.accountcontrolpanel.ontologies.CONTROLPANEL
@@ -26,36 +27,47 @@ import org.osgi.service.component.Compon
 import javax.ws.rs._
 import javax.ws.rs.core.Context
 import javax.ws.rs.core.UriInfo
-import org.apache.clerezza.rdf.scala.utils.{EasyGraph, RichGraphNode}
+import org.apache.clerezza.rdf.scala.utils.EasyGraph
 import collection.JavaConversions._
 import org.slf4j.scala._
 import org.apache.clerezza.rdf.ontologies._
 import org.apache.clerezza.rdf.utils.{UnionMGraph, GraphNode}
+import org.apache.clerezza.platform.usermanager.UserManager
+import org.apache.clerezza.platform.security.UserUtil
+import java.security.{PrivilegedAction, AccessController}
 
 /**
- * Presents a panel where the user can create a webid and edit her profile.
+ * A Panel for browsing linked data of friends. This is a publicly accessible 
browser.
+ * It is different from the PersonPanel, which is for people with local 
accounts who wish
+ * to add friend to their local accounts.
  *
  * @author bblfish
  */
-@Path("/user/{id}/people")
-class PersonPanel extends Logging {
+@Path("/browse")
+class FoafBrowser extends Logging {
        import org.apache.clerezza.rdf.scala.utils.EasyGraph._
 
        protected def activate(componentContext: ComponentContext): Unit = {
 //             this.componentContext = componentContext
        }
 
+       /**
+        * Specialised for browsing people profiles
+        */
        @GET
+       @Path("person")
        def viewPerson(@Context uriInfo: UriInfo,
                                                @QueryParam("uri") uri: 
UriRef): GraphNode = {
                if (uri != null) {//show some error page
-                       System.out.println("uri =="+uri.getUnicodeString)
+                       logger.info("id =="+uri.getUnicodeString)
                }
 
                //val foaf = descriptionProvider.fetchSemantics(uri, 
Cache.Fetch)
                //so here the initial fetch could be used to decide if 
information is available at all,
                //ie, if the URL is accessible, if there are error conditions - 
try later for example...
-               val profile = tcManager.getGraph(uri)
+                val profile = AccessController.doPrivileged(new 
PrivilegedAction[Graph]() {
+                        def run() = tcManager.getGraph(uri)
+                });
 
                val inference = new EasyGraph(new UnionMGraph(new 
SimpleMGraph(),profile))
 

Modified: 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala?rev=1125848&r1=1125847&r2=1125848&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala
 (original)
+++ 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/ProfilePanel.scala
 Sun May 22 00:37:36 2011
@@ -52,6 +52,7 @@ import java.net.URI
 import org.apache.clerezza.rdf.scala.utils.{RichGraphNode, EasyGraphNode, 
EasyGraph}
 import org.apache.clerezza.rdf.ontologies._
 import org.slf4j.scala.Logging
+import javax.security.auth.Subject
 
 object ProfilePanel {
        val webIdTemplate = 
classOf[ProfilePanel].getAnnotation(classOf[Path]).value+"#me"
@@ -194,10 +195,10 @@ class ProfilePanel extends Logging {
                       @FormParam("webId") newContacts: 
java.util.List[UriRef]): Response = {
                import collection.JavaConversions._
                if (newContacts.size > 0) {
-                       val userName: String = UserUtil.getCurrentUserName
+                       val subject = UserUtil.getCurrentUserName
                        var me: GraphNode = AccessController.doPrivileged(new 
PrivilegedAction[GraphNode] {
                                def run: GraphNode = {
-                                       return 
userManager.getUserGraphNode(userName)
+                                       return 
userManager.getUserGraphNode(subject)
                                }
                        })
                        for (contactWebID <- newContacts) {

Modified: 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala?rev=1125848&r1=1125847&r2=1125848&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala
 (original)
+++ 
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala
 Sun May 22 00:37:36 2011
@@ -29,6 +29,7 @@ import xml.{NodeSeq, Text, Node}
 import java.net.{URLEncoder, URL}
 import javax.ws.rs.core.MediaType
 import org.apache.clerezza.rdf.ontologies.{FOAF, RDF, RDFS}
+import javax.swing.UIDefaults.LazyInputMap
 
 /**
  * static methods used by person panel and that could possibly be moved to a 
library
@@ -71,7 +72,7 @@ object person_panel {
                        case uri: UriRef => uri.getUnicodeString
                        case _ => 
"http://upload.wikimedia.org/wikipedia/commons/0/0a/Gnome-stock_person.svg";
                }
-               <a href={"people?uri="+encode(p*)}><img class="mugshot" 
src={pix}/></a>
+               <a href={"person?uri="+encode(p*)}><img class="mugshot" 
src={pix}/></a>
        }
 
        def personInABox(p: RichGraphNode): NodeSeq = {
@@ -117,6 +118,7 @@ object person_panel {
                return <a href={res*}>{label}</a>
        }
 
+       def platform(s: Any) = new 
UriRef("http://clerezza.org/2009/08/platform#"+s)
 
 }
 
@@ -149,16 +151,17 @@ class XmlPerson(args: XmlResult.Argument
        //lazy val webIdInfo =  $[WebProxy].getResourceInfo(webIdUri)
        //lazy val agent : RichGraphNode=  $[WebProxy].fetchSemantics(webIdUri) 
match { case Some(grph) => grph; case None => res};
        lazy val agent : RichGraphNode = res / FOAF.primaryTopic
+       lazy val user= context/platform("user")
+       lazy val username = user/platform("userName")*
+       lazy val local = username != ""
        //
        // setting some header info
        //
 
        
resultDocModifier.addStyleSheet("/account-control-panel/style/profile.css");
        resultDocModifier.setTitle("Profile Viewer");
-       resultDocModifier.addNodes2Elem("tx-module", <h1>Account Control 
Panel</h1>);
+       resultDocModifier.addNodes2Elem("tx-module", <h1>Profile Viewer</h1>);
        resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li 
class="tx-active"><a href="#">Profile Viewer</a></li>);
-       resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li><a 
href="control-panel">Settings</a></li>);
-       resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li><a 
href="profile">Profile</a></li>);
 
        //
        // the content itself.
@@ -167,18 +170,8 @@ class XmlPerson(args: XmlResult.Argument
 
        override def content = <div id="tx-content">
                <h2>Profile Viewer</h2>
-               <form action="profile/addContact" method="POST">
-                       <table>
-                               {val typ: Resource = (agent / RDF.`type`).!
-                       typ match {
-                               case FOAF.Person => personHtml(agent)
-                               case FOAF.Group => groupHtml(agent)
-                               case FOAF.Agent => agentHtml(agent)
-                               case _ => allAgentsHtml(agent.getGraph)
-                       }}
-                       </table>
-                               <input type="submit" value="add contacts"/>
-               </form>
+               {if (local) <form action="browser/addContact" 
method="POST">{maintable}</form>
+                else maintable }
                <code>
                        <pre>{val s = 
org.apache.clerezza.rdf.core.serializedform.Serializer.getInstance();
                        import java.io._
@@ -189,6 +182,17 @@ class XmlPerson(args: XmlResult.Argument
                </code>
        </div>
 
+        def maintable = <table>
+                {val typ: Resource = (agent / RDF.`type`).!
+                typ match {
+                        case FOAF.Person => personHtml(agent)
+                        case FOAF.Group => groupHtml(agent)
+                        case FOAF.Agent => agentHtml(agent)
+                        case _ => allAgentsHtml(agent.getGraph)
+                }}
+        </table>
+
+
 
        //
        // Methods called by the content
@@ -241,9 +245,9 @@ class XmlPerson(args: XmlResult.Argument
                //todo: only first image is shown
                {<tr><td colspan="2">Person</td></tr>}++
                ifE(p!){   case u:UriRef=> if (definedHere(u))
-                       <tr><td><input type="checkbox" name="webId" 
value={p*}/>Add as contact</td><td><a href={p*}>{p*}</a></td></tr>
+                       <tr>{if (local) <td><input type="checkbox" name="webId" 
value={p*}/>Add as contact</td> else <td>WebID</td>}<td><a 
href={p*}>{p*}</a></td></tr>
                        else
-                       <tr><td><a href=""/>Explore</td><td><a 
href={"people?uri="+encode(u.getUnicodeString)}>{p*}</a></td></tr>
+                       <tr><td><a href=""/>Explore</td><td><a 
href={"person?uri="+encode(u.getUnicodeString)}>{p*}</a></td></tr>
                                          case _ => emptyText;
                }++
                ifE(p/FOAF.name){f=>(<tr><td>Name:</td><td>{f*}</td></tr>)}++


Reply via email to