You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by bb...@apache.org on 2011/05/22 02:37:36 UTC

svn commit: r1125848 - in /incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main: resources/OSGI-INF/ scala/org/apache/clerezza/platform/accountcontrolpanel/ scala/org/apache/clerezza/platform/accountco...

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>)}++