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