You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2011/07/06 12:02:00 UTC

svn commit: r1143323 - 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: reto
Date: Wed Jul  6 10:01:59 2011
New Revision: 1143323

URL: http://svn.apache.org/viewvc?rev=1143323&view=rev
Log:
CLEREZZA-591: renamed file, simplified permission superclass, made some classes inner classes

Added:
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/
      - copied from r1143291, incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/PersonPanel.scala
      - copied, changed from r1143291, incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ProfilePanel.scala
      - copied, changed from r1143291, incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/profile_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/SettingsPanel.scala
      - copied, changed from r1143291, incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/settings_panel.scala
Removed:
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/person_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/profile_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/settings_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/
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/html/ping_back_collection_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_item_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_form_panel.scala
    incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/permissions.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=1143323&r1=1143322&r2=1143323&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 Wed Jul  6 10:01:59 2011
@@ -27,13 +27,12 @@
         <reference name="systemGraph" interface="org.apache.clerezza.rdf.core.MGraph" cardinality="1..1" policy="static" target="(name=urn:x-localinstance:/system.graph)" bind="bindSystemGraph" unbind="unbindSystemGraph"/>
         <reference name="cgProvider" interface="org.apache.clerezza.platform.graphprovider.content.ContentGraphProvider" cardinality="1..1" policy="static" bind="bindCgProvider" unbind="unbindCgProvider"/>
     </scr:component>
-    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.pages.settings_panel">
-        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.pages.settings_panel"/>
-        <service servicefactory="false">
-            <provide interface="org.apache.clerezza.platform.typerendering.Renderlet"/>
+    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.html.SettingsPanel">
+        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.html.SettingsPanel"/>
+		<service servicefactory="false">
+            <provide interface="org.apache.clerezza.platform.typerendering.TypeRenderlet"/>
         </service>
-        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.pages.settings_panel"/>
-        <reference name="renderletManager" interface="org.apache.clerezza.platform.typerendering.RenderletManager" cardinality="1..1" policy="static" bind="bindRenderletManager" unbind="unbindRenderletManager"/>
+        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.html.SettingsPanel"/>
     </scr:component>
 
 
@@ -55,12 +54,12 @@
         <reference name="tcManager" interface="org.apache.clerezza.rdf.core.access.TcManager"
                    cardinality="1..1" policy="static" bind="bindTcManager" unbind="unbindTcManager"/>
     </scr:component>
-    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.pages.profile_panel">
-        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.pages.profile_panel"/>
+    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.html.ProfilePanel">
+        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.html.ProfilePanel"/>
         <service servicefactory="false">
             <provide interface="org.apache.clerezza.platform.typerendering.TypeRenderlet"/>
         </service>
-        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.pages.profile_panel"/>
+        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.html.ProfilePanel"/>
     </scr:component>
 
 	<scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.FoafBrowser">
@@ -73,13 +72,13 @@
         <reference name="tcManager" interface="org.apache.clerezza.rdf.core.access.TcManager"
                    cardinality="1..1" policy="static" bind="bindTcManager" unbind="unbindTcManager"/>
 	</scr:component>
-    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.pages.person_panel">
-		<implementation class="org.apache.clerezza.platform.accountcontrolpanel.pages.person_panel"/>
+    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.html.PersonPanel">
+		<implementation class="org.apache.clerezza.platform.accountcontrolpanel.html.PersonPanel"/>
 		<service servicefactory="false">
 			<provide interface="org.apache.clerezza.platform.typerendering.TypeRenderlet"/>
 		</service>
 		<property name="javax.ws.rs" type="Boolean" value="true"/>
-		<property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.pages.person_panel"/>
+		<property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.html.PersonPanel"/>
 	</scr:component>
 
     <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.PingBack">
@@ -94,28 +93,28 @@
 
     </scr:component>
     <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.ping_back_collection_panel">
-        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_back_collection_panel"/>
+        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.html.ping_back_collection_panel"/>
         <service servicefactory="false">
             <provide interface="org.apache.clerezza.platform.typerendering.TypeRenderlet"/>
         </service>
         <property name="javax.ws.rs" type="Boolean" value="true"/>
-        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_back_collection_panel"/>
+        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.html.ping_back_collection_panel"/>
     </scr:component>
-    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_back_item_panel">
-        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_back_item_panel"/>
+    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.html.ping_back_item_panel">
+        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.html.ping_back_item_panel"/>
         <service servicefactory="false">
             <provide interface="org.apache.clerezza.platform.typerendering.TypeRenderlet"/>
         </service>
         <property name="javax.ws.rs" type="Boolean" value="true"/>
-        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_back_item_panel"/>
+        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.html.ping_back_item_panel"/>
     </scr:component>
-    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_form_panel">
-        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_form_panel"/>
+    <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.html.ping_form_panel">
+        <implementation class="org.apache.clerezza.platform.accountcontrolpanel.html.ping_form_panel"/>
         <service servicefactory="false">
             <provide interface="org.apache.clerezza.platform.typerendering.TypeRenderlet"/>
         </service>
         <property name="javax.ws.rs" type="Boolean" value="true"/>
-        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.pages.ping_form_panel"/>
+        <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.html.ping_form_panel"/>
     </scr:component>
 
 </components>

Copied: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/PersonPanel.scala (from r1143291, 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/html/PersonPanel.scala?p2=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/PersonPanel.scala&p1=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/person_panel.scala&r1=1143291&r2=1143323&rev=1143323&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/html/PersonPanel.scala Wed Jul  6 10:01:59 2011
@@ -1,4 +1,4 @@
-package org.apache.clerezza.platform.accountcontrolpanel.pages
+package org.apache.clerezza.platform.accountcontrolpanel.html
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -33,9 +33,9 @@ import javax.swing.UIDefaults.LazyInputM
 import org.apache.clerezza.platform.accountcontrolpanel.FoafBrowser
 
 /**
- * static methods used by person panel and that could possibly be moved to a library
+ * utility methods used by person panel
  */
-object person_panel {
+object PersonPanel {
 	val emptyText = new Text("")
 
 	def ifE[T](arg:T)(template: T=>Node ):NodeSeq = {
@@ -126,163 +126,162 @@ object person_panel {
 /**
  * Metadata class for the person panel
  */
-class person_panel extends SRenderlet {
+class PersonPanel extends SRenderlet {
 	def getRdfType() = CONTROLPANEL.ProfileViewerPage
 
 	override def renderedPage(arguments: XmlResult.Arguments) = new XmlPerson(arguments)
-}
-
-/**
- * Content class for the Person Panel
- */
-class XmlPerson(args: XmlResult.Arguments) extends XmlResult(args) {
-	import person_panel._
-
-	//
-	// Some initial constants
-	//
-
-	// either we use the rdf data on this as commented out here,
-	//	    val it: CollectedIter[RichGraphNode] = res / FOAF.primaryTopic
-	//	    val primeTpc: RichGraphNode = it.apply(0)
-	// or we can get that information from URL, as shown here
-	//lazy val webIdStr = uriInfo.getQueryParameters(true).getFirst("uri")
-	//lazy val webIdUri= new UriRef(webIdStr)
-
-	//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 agentDoc = FoafBrowser.removeHash(agent.getNode.asInstanceOf[UriRef]).getUnicodeString
-	lazy val user= context/platform("user")
-	lazy val username = user/platform("userName")*
-	lazy val local = username != "" && username != "anonymous"
-	//
-	// setting some header info
-	//
-
-	resultDocModifier.addStyleSheet("/account-control-panel/style/profile.css");
-	resultDocModifier.setTitle("Profile Viewer");
-	resultDocModifier.addNodes2Elem("tx-module", <h1>Profile Viewer</h1>);
-	resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li class="tx-active"><a href="#">Profile Viewer</a></li>);
-
-	//
-	// the content itself.
-	// This is the piece that is closest to a pure ssp, though there is still too much code in it
-	//
-
-	override def content = <div id="tx-content">
-		<h2>Profile Viewer</h2>
-		{if (local) <form action={"/user/"+username+"/profile/addContact"} method="POST">
-			<input type="submit" value="Add Contacts"/>{maintable}<input type="submit" value="Add Contacts"/>
-		</form>
-		 else maintable }
-		<code>
-			<pre>{val s = org.apache.clerezza.rdf.core.serializedform.Serializer.getInstance();
-			import java.io._
-			val bout = new ByteArrayOutputStream()
-			s.serialize(bout, agent.getGraph(), "text/rdf+n3");
-			bout.toString("UTF-8")
-			}</pre>
-		</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
-	//
-
-	def relations() = {
-		<table>{for (friend <- agent/FOAF.knows) {
-			<tr><td>{friend*}</td></tr>
-			}
-			<tr><td><form id="addContact" method="post" action="profile/people">
-			<input type="text" name="webId" size="80"/>
-			<input type="submit" value="add contact" />
-		</form></td></tr>
-		}</table>
-	}
 
+	/**
+	 * Content class for the Person Panel
+	 */
+	class XmlPerson(args: XmlResult.Arguments) extends XmlResult(args) {
+		import PersonPanel._
 
-	def allAgentsHtml(tc: TripleCollection): Node = {<span>
-		<th><tr colspan="2">All agents found</tr></th>
-		{ import collection.JavaConversions._
-		//todo: change
-		  val base = new URL(agent.getNode.asInstanceOf[UriRef].getUnicodeString());
-		  val lclPrson = for (tr: Triple <- tc.filter(null, RDF.`type`, FOAF.Person);
-				 subjUrl = try { new URL(tr.getSubject.asInstanceOf[UriRef].getUnicodeString) } catch  { case _ => null }
-				 if (subjUrl != null && base.sameFile(subjUrl))
-		  ) yield tr.getSubject
-		  for (p <- lclPrson) yield
-				<tbody>{personHtml(new GraphNode(p,tc))}</tbody>
+		//
+		// Some initial constants
+		//
+
+		// either we use the rdf data on this as commented out here,
+		//	    val it: CollectedIter[RichGraphNode] = res / FOAF.primaryTopic
+		//	    val primeTpc: RichGraphNode = it.apply(0)
+		// or we can get that information from URL, as shown here
+		//lazy val webIdStr = uriInfo.getQueryParameters(true).getFirst("uri")
+		//lazy val webIdUri= new UriRef(webIdStr)
+
+		//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 agentDoc = FoafBrowser.removeHash(agent.getNode.asInstanceOf[UriRef]).getUnicodeString
+		lazy val user= context/platform("user")
+		lazy val username = user/platform("userName")*
+		lazy val local = username != "" && username != "anonymous"
+		//
+		// setting some header info
+		//
+
+		resultDocModifier.addStyleSheet("/account-control-panel/style/profile.css");
+		resultDocModifier.setTitle("Profile Viewer");
+		resultDocModifier.addNodes2Elem("tx-module", <h1>Profile Viewer</h1>);
+		resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li class="tx-active"><a href="#">Profile Viewer</a></li>);
+
+		//
+		// the content itself.
+		// This is the piece that is closest to a pure ssp, though there is still too much code in it
+		//
+
+		override def content = <div id="tx-content">
+			<h2>Profile Viewer</h2>
+			{if (local) <form action={"/user/"+username+"/profile/addContact"} method="POST">
+				<input type="submit" value="Add Contacts"/>{maintable}<input type="submit" value="Add Contacts"/>
+			</form>
+			 else maintable }
+			<code>
+				<pre>{val s = org.apache.clerezza.rdf.core.serializedform.Serializer.getInstance();
+				import java.io._
+				val bout = new ByteArrayOutputStream()
+				s.serialize(bout, agent.getGraph(), "text/rdf+n3");
+				bout.toString("UTF-8")
+				}</pre>
+			</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
+		//
+
+		def relations() = {
+			<table>{for (friend <- agent/FOAF.knows) {
+				<tr><td>{friend*}</td></tr>
+				}
+				<tr><td><form id="addContact" method="post" action="profile/people">
+				<input type="text" name="webId" size="80"/>
+				<input type="submit" value="add contact" />
+			</form></td></tr>
+			}</table>
 		}
-	</span>}
 
-	/**
-	 * Is the uri defined here on the page from which the WebID comes?
-	 * The point of this function is not to give the user a choice of adding a person to his list
-	 * of friends, until that page has been at least once properly de-referenced. (People can link
-	 * to non existent foaf files, things that are not persons, etc...)
-	 *
-	 * For pages with multiple #uris
-	 * This will always return false for URIs that are redirected (as the foaf vocab is)
-	 *
-	 * If that is the reasoning then should we also extend this method to return true for pages already
-	 * in the cache?
-	 *
-	 */
-	def definedHere(uri: UriRef):Boolean = uri.getUnicodeString.startsWith(agentDoc)
 
+		def allAgentsHtml(tc: TripleCollection): Node = {<span>
+			<th><tr colspan="2">All agents found</tr></th>
+			{ import collection.JavaConversions._
+			//todo: change
+			  val base = new URL(agent.getNode.asInstanceOf[UriRef].getUnicodeString());
+			  val lclPrson = for (tr: Triple <- tc.filter(null, RDF.`type`, FOAF.Person);
+					 subjUrl = try { new URL(tr.getSubject.asInstanceOf[UriRef].getUnicodeString) } catch  { case _ => null }
+					 if (subjUrl != null && base.sameFile(subjUrl))
+			  ) yield tr.getSubject
+			  for (p <- lclPrson) yield
+					<tbody>{personHtml(new GraphNode(p,tc))}</tbody>
+			}
+		</span>}
 
-	def personHtml(p: RichGraphNode): NodeSeq = {
-		//note: img is a sub-relation of depiction, so an inference engine would add both, and one would end up with repetition
-		//todo: only first image is shown
-		{<tr><td colspan="2">Person</td></tr>}++
-		ifE(p!){   case u:UriRef=> if (definedHere(u))
-			<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={"person?uri="+encode(u.getUnicodeString)}>{p*}</a></td></tr>
-					  case _ => emptyText;
-		}++
-		ifE(p/FOAF.name){f=>(<tr><td>Name:</td><td>{f*}</td></tr>)}++
-		 ifE(p/FOAF.firstName){f=>(<tr><td>First Name:</td><td>{f}</td></tr>)} ++
-		 ifE(firstOf(p,FOAF.family_name,FOAF.familyName)){f=>(<tr><td>Family Name:</td><td>{f*}</td></tr>)} ++
-		 ifE(p/FOAF.mbox){f =>(<tr><td>Mbox:</td><td><ul>{for (m<-f)yield {<li><a href={m*}>{m*}</a></li>}}</ul></td></tr>)}++
-		 ifE(p/FOAF.homepage){f =>(<tr><td>Homepage:</td><td><ul>{for (x<-f)yield <li><a href={x*}>{x*}</a></li>}</ul></td></tr>)}++
-		 ifE(p/FOAF.currentProject){f =>(<tr><td>Current Project(s):</td><td><ul>{for (x<-f) yield <li>{linkNlabel(x)}</li>}</ul></td></tr>)}++
-		 ifE(p/FOAF.depiction){f=>(<tr><td>Depictions:</td><td><img src={f*} /></td></tr>)}++
-		 ifE(p/FOAF.img){f=>(<tr><td>Depictions:</td><td><img src={f*} /></td></tr>)}++
-		 ifE(p/FOAF.logo){f=>(<tr><td>Logo:</td><td><img src={f*} /></td></tr>)}++
-		 ifE(p/FOAF.knows){k=>(<tr><td>claims to know</td><td><table>{for (fr<-k) yield displayAgent(fr)}</table></td></tr>)}
-	}
+		/**
+		 * Is the uri defined here on the page from which the WebID comes?
+		 * The point of this function is not to give the user a choice of adding a person to his list
+		 * of friends, until that page has been at least once properly de-referenced. (People can link
+		 * to non existent foaf files, things that are not persons, etc...)
+		 *
+		 * For pages with multiple #uris
+		 * This will always return false for URIs that are redirected (as the foaf vocab is)
+		 *
+		 * If that is the reasoning then should we also extend this method to return true for pages already
+		 * in the cache?
+		 *
+		 */
+		def definedHere(uri: UriRef):Boolean = uri.getUnicodeString.startsWith(agentDoc)
+
+
+		def personHtml(p: RichGraphNode): NodeSeq = {
+			//note: img is a sub-relation of depiction, so an inference engine would add both, and one would end up with repetition
+			//todo: only first image is shown
+			{<tr><td colspan="2">Person</td></tr>}++
+			ifE(p!){   case u:UriRef=> if (definedHere(u))
+				<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={"person?uri="+encode(u.getUnicodeString)}>{p*}</a></td></tr>
+						  case _ => emptyText;
+			}++
+			ifE(p/FOAF.name){f=>(<tr><td>Name:</td><td>{f*}</td></tr>)}++
+			ifE(p/FOAF.firstName){f=>(<tr><td>First Name:</td><td>{f}</td></tr>)} ++
+			ifE(firstOf(p,FOAF.family_name,FOAF.familyName)){f=>(<tr><td>Family Name:</td><td>{f*}</td></tr>)} ++
+			ifE(p/FOAF.mbox){f =>(<tr><td>Mbox:</td><td><ul>{for (m<-f)yield {<li><a href={m*}>{m*}</a></li>}}</ul></td></tr>)}++
+			ifE(p/FOAF.homepage){f =>(<tr><td>Homepage:</td><td><ul>{for (x<-f)yield <li><a href={x*}>{x*}</a></li>}</ul></td></tr>)}++
+			ifE(p/FOAF.currentProject){f =>(<tr><td>Current Project(s):</td><td><ul>{for (x<-f) yield <li>{linkNlabel(x)}</li>}</ul></td></tr>)}++
+			ifE(p/FOAF.depiction){f=>(<tr><td>Depictions:</td><td><img src={f*} /></td></tr>)}++
+			ifE(p/FOAF.img){f=>(<tr><td>Depictions:</td><td><img src={f*} /></td></tr>)}++
+			ifE(p/FOAF.logo){f=>(<tr><td>Logo:</td><td><img src={f*} /></td></tr>)}++
+			ifE(p/FOAF.knows){k=>(<tr><td>claims to know</td><td><table>{for (fr<-k) yield displayAgent(fr)}</table></td></tr>)}
+		}
 
 
-	def groupHtml(grp: RichGraphNode): NodeSeq = {
-		ifE(grp/FOAF.name){f=>(<tr><td>Name:</td><td>{f}</td></tr>)}++
-		ifE(grp/FOAF.logo*){f=>(<tr><td>Logo:</td><td><img src={f} /></td></tr>)}
-	}
+		def groupHtml(grp: RichGraphNode): NodeSeq = {
+			ifE(grp/FOAF.name){f=>(<tr><td>Name:</td><td>{f}</td></tr>)}++
+			ifE(grp/FOAF.logo*){f=>(<tr><td>Logo:</td><td><img src={f} /></td></tr>)}
+		}
 
 
-	def displayAgent(agent: RichGraphNode): NodeSeq = {
-	  val typ: Resource = (agent/RDF.`type`).!
-	  return typ match {
-			case FOAF.Person => personHtml(agent)
-			case FOAF.Group => groupHtml(agent)
-			case FOAF.Agent => agentHtml(agent)
-			case _ => emptyText
-	  }
-	}
+		def displayAgent(agent: RichGraphNode): NodeSeq = {
+		  val typ: Resource = (agent/RDF.`type`).!
+		  return typ match {
+				case FOAF.Person => personHtml(agent)
+				case FOAF.Group => groupHtml(agent)
+				case FOAF.Agent => agentHtml(agent)
+				case _ => emptyText
+		  }
+		}
 
 
+	}
 }
-

Copied: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ProfilePanel.scala (from r1143291, incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/profile_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/html/ProfilePanel.scala?p2=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ProfilePanel.scala&p1=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/profile_panel.scala&r1=1143291&r2=1143323&rev=1143323&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/profile_panel.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ProfilePanel.scala Wed Jul  6 10:01:59 2011
@@ -1,4 +1,4 @@
-package org.apache.clerezza.platform.accountcontrolpanel.pages
+package org.apache.clerezza.platform.accountcontrolpanel.html
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -31,250 +31,251 @@ import org.apache.clerezza.rdf.core.UriR
 import org.apache.clerezza.platform.accountcontrolpanel.ontologies.CONTROLPANEL
 import org.apache.clerezza.rdf.ontologies.{RDFS, DC, FOAF}
 
-class profile_panel extends SRenderlet {
-  override def getRdfType() = CONTROLPANEL.ProfilePage
+class ProfilePanel extends SRenderlet {
 
-  override def renderedPage(arguments: XmlResult.Arguments) = new ProfilePanelXHTML(arguments)
-}
-
-class ProfilePanelXHTML(arguments: XmlResult.Arguments) extends XmlResult(arguments ) {
-
-	//set header properties
-
- 	resultDocModifier.addStyleSheet("/account-control-panel/style/profile.css");
-	resultDocModifier.addScriptReference("/account-control-panel/scripts/profile.js");
-	resultDocModifier.addScriptReference("/account-control-panel/scripts/IEKeygen.js");
-	resultDocModifier.setTitle("Account Control Panel");
-	resultDocModifier.addNodes2Elem("tx-module", <h1>Account Control Panel</h1>);
-	resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li class="tx-active"><a href="#">Profile</a></li>);
-	resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li><a href="control-panel">Settings</a></li>);
-
-	//constants and variables
-
-	lazy val agent: RichGraphNode = res / FOAF.primaryTopic
-
-
-	// the content itself
-	// clearly in this case there is so much more in the the methods, that one could hesitate to call this an ssp
-
-	override def content = {
-	  <div id="tx-content">
-		  <h2>Personal Profile</h2>{agent ! match {
-				case _: BNode => createWebId()
-				case _: UriRef => existingWebId()
-			 }}
-	  </div>
-
-	}
-
-	//methods used to create content
+	override def getRdfType() = CONTROLPANEL.ProfilePage
 
-	def cp(s: Any) =  new UriRef("http://clerezza.org/2009/03/controlpanel#" + s)
-	def platform(s: Any) = new UriRef("http://clerezza.org/2009/08/platform#" + s)
+	override def renderedPage(arguments: XmlResult.Arguments) = new ProfilePanelXHTML(arguments)
 
+	class ProfilePanelXHTML(arguments: XmlResult.Arguments) extends XmlResult(arguments ) {
 
-	def createWebId() = {
-	  <h3>Associate Profile to WebID</h3>
-	  <div id="newOrExistingSelection">
-		<p>Your profile is not currently associated to a WebID. A WebID allows you
-		  to link your friends as well as to log-in to many sites (supporting foaf+ssl
-		  or open-id).
-		</p>
-		<p>You may either create a new WebID or associate your account to an
-		  existing WebID. Only creating a WebID here will allow you to manage your
-		  profile here.
-		</p>
-		<form action="#" id="associateSelection">
-		  <button type="button" id="newWebIdButton">Create a new Web-Id</button>
-		  <button type="button" id="existingWebIdButton">I already have a Web-ID and want to use it</button>
-		</form>
-	  </div>
-	  <div id="createNewWebId">
-		<p>You have chosen to create a new Web-Id.</p>
-		<p>The Web-ID will be created as follows:
-		  <br/>
-		  <ol>
-			<li>Web-Id:
-			  {var webId = res / cp("suggestedPPDUri") *;
-				webId += "#me";
-				webId}
-			</li>
-			<li>Personal-Profile Document: {res/cp("suggestedPPDUri")*}</li>
-		  </ol>
-		</p>
-		<form method="post" action="profile/create-new-web-id">
-		  <input value="Create it!" type="submit"/>
-		</form>
-	  </div>
-	  <div id="setExistingWebId">
-		<p>Please enter your Web-Id, if your Web-Id supports Foaf+SSL you will
-		  be able to use it to log in to this site.</p>
-		<form method="post" action="profile/set-existing-webid">
-		  <label for="webid">WebID</label> <input type="text" name="webid" size="80" title="Web-ID"/>
-		  <br/>
-		  <input value="Associate Profile to Web-Id" type="submit"/>
-		  <p/>
-		</form>
-	  </div>
-
-	}
-
-	def existingWebId() = {
-	  if ((res / cp("isLocalProfile")).as[Boolean]) {
-		existingLocalWebId()
-	  } else {
-		roamingUser()
+		//set header properties
+
+		resultDocModifier.addStyleSheet("/account-control-panel/style/profile.css");
+		resultDocModifier.addScriptReference("/account-control-panel/scripts/profile.js");
+		resultDocModifier.addScriptReference("/account-control-panel/scripts/IEKeygen.js");
+		resultDocModifier.setTitle("Account Control Panel");
+		resultDocModifier.addNodes2Elem("tx-module", <h1>Account Control Panel</h1>);
+		resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li class="tx-active"><a href="#">Profile</a></li>);
+		resultDocModifier.addNodes2Elem("tx-module-tabs-ol", <li><a href="control-panel">Settings</a></li>);
+
+		//constants and variables
+
+		lazy val agent: RichGraphNode = res / FOAF.primaryTopic
+
+
+		// the content itself
+		// clearly in this case there is so much more in the the methods, that one could hesitate to call this an ssp
+
+		override def content = {
+		  <div id="tx-content">
+			  <h2>Personal Profile</h2>{agent ! match {
+					case _: BNode => createWebId()
+					case _: UriRef => existingWebId()
+				 }}
+		  </div>
+
+		}
+
+		//methods used to create content
+
+		def cp(s: Any) =  new UriRef("http://clerezza.org/2009/03/controlpanel#" + s)
+		def platform(s: Any) = new UriRef("http://clerezza.org/2009/08/platform#" + s)
+
+
+		def createWebId() = {
+		  <h3>Associate Profile to WebID</h3>
+		  <div id="newOrExistingSelection">
+			<p>Your profile is not currently associated to a WebID. A WebID allows you
+			  to link your friends as well as to log-in to many sites (supporting foaf+ssl
+			  or open-id).
+			</p>
+			<p>You may either create a new WebID or associate your account to an
+			  existing WebID. Only creating a WebID here will allow you to manage your
+			  profile here.
+			</p>
+			<form action="#" id="associateSelection">
+			  <button type="button" id="newWebIdButton">Create a new Web-Id</button>
+			  <button type="button" id="existingWebIdButton">I already have a Web-ID and want to use it</button>
+			</form>
+		  </div>
+		  <div id="createNewWebId">
+			<p>You have chosen to create a new Web-Id.</p>
+			<p>The Web-ID will be created as follows:
+			  <br/>
+			  <ol>
+				<li>Web-Id:
+				  {var webId = res / cp("suggestedPPDUri") *;
+					webId += "#me";
+					webId}
+				</li>
+				<li>Personal-Profile Document: {res/cp("suggestedPPDUri")*}</li>
+			  </ol>
+			</p>
+			<form method="post" action="profile/create-new-web-id">
+			  <input value="Create it!" type="submit"/>
+			</form>
+		  </div>
+		  <div id="setExistingWebId">
+			<p>Please enter your Web-Id, if your Web-Id supports Foaf+SSL you will
+			  be able to use it to log in to this site.</p>
+			<form method="post" action="profile/set-existing-webid">
+			  <label for="webid">WebID</label> <input type="text" name="webid" size="80" title="Web-ID"/>
+			  <br/>
+			  <input value="Associate Profile to Web-Id" type="submit"/>
+			  <p/>
+			</form>
+		  </div>
+
+		}
+
+		def existingWebId() = {
+		  if ((res / cp("isLocalProfile")).as[Boolean]) {
+			existingLocalWebId()
+		  } else {
+			roamingUser()
+		  }
+		}
+
+
+		def existingLocalWebId() = {
+		  <h3>Manage your profile</h3>
+			 <p>Here you can change your public profile.</p>
+
+		  <form method="post" action="profile/modify">
+			<input type="hidden" name="webId" value={agent *}/>
+			<table>
+			  <tr><td class="formlabel">Name:</td>
+				<td><input type="text" name="name" value={agent / FOAF.name *}/></td>
+			  </tr>
+			  <tr><td class="formlabel multiline">Description:</td>
+				<td><textarea name="description" rows="3" cols="80">{agent / DC.description *}</textarea></td>
+			  </tr>
+			  <tr><td class="formlabel"><input value="Modify" type="submit"/></td><td/></tr>
+			</table>
+
+			<p/>
+		  </form>
+
+		  <h3>Contacts</h3>
+		  <form id="addContact" method="get" action="/browse/person">
+		  <table>{ var i =0
+			  val friends = for (friend <- agent/FOAF.knows) yield {
+			  import PersonPanel._
+			  <td class="personInABox">{personInABox(friend)}</td>
+			 }
+			 for (row <- friends.grouped(5)) yield <tr>{row}</tr>
+		  }</table>
+		  <input type="text" name="uri" size="80"/><input type="submit" value="add contact" />
+		  </form>
+
+		  <h3>Key and Certificate Creation</h3>
+
+		  <script type="text/javascript"> <![CDATA[$(document).ready(  function() { configurePage(); }   ); ]]> </script>
+
+		  <div id="iehelptext" style="display: none;">
+			<p>Using Internet Explorer under Windows Vista or above or Windows
+			  Server 2008, you need to configure the following for this to work:</p>
+			<ul>
+			  <li>Add this site to the <i>Trusted Sites</i> list: in Internet
+				Options -&gt; Security -&gt; Trusted Sites -&gt; Sites -&gt; Add ...</li>
+			  <li>You may need to configure the trust level (in this tab), using
+				<i>Custom Level...</i>: enable <i>Initialize and script ActiveX
+				  controls not marked as safe for scripting</i>.</li>
+			  <li>If you are using Windows Vista without SP1 or above, you will
+				probably need to install <a href="cacert.crt">this certificate</a> as a
+				Trusted Root Certification Authority Certificate for your own
+				certificate installation to succeed. You should probably remove that
+				trusted root CA certificate afterwards.</li>
+			</ul>
+		  </div>
+		  <form id="keygenform" method="post" action="profile/keygen">
+			<input name="webId" id="webId" type="hidden" value={agent*} />
+			<table>
+			  <colgroup><col width="1*"/><col/></colgroup>
+			  <tr>
+				<td class="formlabel">Certificate Name:</td>
+				<td>
+				  <input alt="create a certificate name that will help you distinguish it from others you may have" name="cn"
+							size="35" id="cn" type="text" value={ ((agent/FOAF.name*)+"@clerezza")}/>
+				</td>
+			  </tr>
+			  <tr>
+				<td class="formlabel">Key strength:</td>
+				<td id="keystrenghtd">
+				  <keygen id="spkac" name="spkac" challenge="TheChallenge1"/>
+				</td>
+			  </tr>
+			  <tr>
+				<td class="formlabel">Valid for:</td>
+				<td>
+				  <input type="text" name="days" value="365" size="4"/>
+				  days <input type="text" name="hours" value="0.0" size="4"/> hours</td>
+			  </tr>
+			  <tr>
+				<td class="formlabel">Comment:</td>
+				<td><input type="text" name="comment" value="" size="80"/></td>
+			  </tr>
+			  <tr><td class="formlabel"><input id="keygensubmit" type="submit" value="create certificate" /></td><td/></tr>
+			</table>
+		  </form>
+		  <h3>Existing Certificates</h3>
+		  <form method="post" action="profile/deletekey">
+			<table>
+			  <tr><th>Delete</th><th>Certificate Details</th></tr>
+			  <input name="webId" id="webId" type="hidden" value={agent*} />
+			  <tbody>{
+				  for (key <- agent/-CERT.identity )
+					yield { val modulus = (key/RSA.modulus).as[BigInteger]
+							if (modulus == null)  <span/> //todo: broken public key, should delete it
+							else <tr><td><input type="checkbox" name="keyhash" value={modulus.hashCode().toString()}/></td>
+						<td><table>
+							<tr><td class="propvalue">Created:</td><td>{beautifyDate(key/DC.date )}</td></tr>
+							<tr><td class="propvalue">Comment:</td><td>{ key/RDFS.comment* }</td></tr>
+							<tr><td class="propvalue multiline">Modulus:</td><td><code>{ beautifyHex(key/RSA.modulus) }</code></td></tr>
+							<tr><td class="propvalue">Exponent:</td><td><code>{ beautifyInt(key/RSA.public_exponent) }</code></td></tr>
+							</table>
+						</td>
+								</tr>}
+				}</tbody>
+			</table>
+			<input type="submit" value="Disable Keys"/>
+		  </form>
+		  <p></p>
+
+		}
+
+		def roamingUser() = {
+		  <h3>Using remote profile</h3>
+			 <p>
+			{agent / FOAF.nick *}, you have accessed this site using your WebID
+				{"<" + (agent *) + ">"}
+				which has not been
+				created on this site.To edit your profile you should visit the site issuing the
+				profile.</p>
+		}
+
+
+
+
+	  def beautifyDate(dtIt: CollectedIter[RichGraphNode]) {
+		  if (0 == dtIt.size) return "_"
+		  DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.FULL).format(dtIt.as[Date])
 	  }
-	}
-
-
-	def existingLocalWebId() = {
-	  <h3>Manage your profile</h3>
-		 <p>Here you can change your public profile.</p>
-
-	  <form method="post" action="profile/modify">
-		<input type="hidden" name="webId" value={agent *}/>
-		<table>
-		  <tr><td class="formlabel">Name:</td>
-			<td><input type="text" name="name" value={agent / FOAF.name *}/></td>
-		  </tr>
-		  <tr><td class="formlabel multiline">Description:</td>
-			<td><textarea name="description" rows="3" cols="80">{agent / DC.description *}</textarea></td>
-		  </tr>
-		  <tr><td class="formlabel"><input value="Modify" type="submit"/></td><td/></tr>
-		</table>
-
-		<p/>
-	  </form>
-
-	  <h3>Contacts</h3>
-	  <form id="addContact" method="get" action="/browse/person">
-	  <table>{ var i =0
-		  val friends = for (friend <- agent/FOAF.knows) yield {
-		  import person_panel._
-		  <td class="personInABox">{personInABox(friend)}</td>
-		 }
-		 for (row <- friends.grouped(5)) yield <tr>{row}</tr>
-	  }</table>
-	  <input type="text" name="uri" size="80"/><input type="submit" value="add contact" />
-	  </form>
-
-	  <h3>Key and Certificate Creation</h3>
-
-	  <script type="text/javascript"> <![CDATA[$(document).ready(  function() { configurePage(); }   ); ]]> </script>
-
-	  <div id="iehelptext" style="display: none;">
-		<p>Using Internet Explorer under Windows Vista or above or Windows
-		  Server 2008, you need to configure the following for this to work:</p>
-		<ul>
-		  <li>Add this site to the <i>Trusted Sites</i> list: in Internet
-			Options -&gt; Security -&gt; Trusted Sites -&gt; Sites -&gt; Add ...</li>
-		  <li>You may need to configure the trust level (in this tab), using
-			<i>Custom Level...</i>: enable <i>Initialize and script ActiveX
-			  controls not marked as safe for scripting</i>.</li>
-		  <li>If you are using Windows Vista without SP1 or above, you will
-			probably need to install <a href="cacert.crt">this certificate</a> as a
-			Trusted Root Certification Authority Certificate for your own
-			certificate installation to succeed. You should probably remove that
-			trusted root CA certificate afterwards.</li>
-		</ul>
-	  </div>
-	  <form id="keygenform" method="post" action="profile/keygen">
-		<input name="webId" id="webId" type="hidden" value={agent*} />
-		<table>
-		  <colgroup><col width="1*"/><col/></colgroup>
-		  <tr>
-			<td class="formlabel">Certificate Name:</td>
-			<td>
-			  <input alt="create a certificate name that will help you distinguish it from others you may have" name="cn"
-						size="35" id="cn" type="text" value={ ((agent/FOAF.name*)+"@clerezza")}/>
-			</td>
-		  </tr>
-		  <tr>
-			<td class="formlabel">Key strength:</td>
-			<td id="keystrenghtd">
-			  <keygen id="spkac" name="spkac" challenge="TheChallenge1"/>
-			</td>
-		  </tr>
-		  <tr>
-			<td class="formlabel">Valid for:</td>
-			<td>
-			  <input type="text" name="days" value="365" size="4"/>
-			  days <input type="text" name="hours" value="0.0" size="4"/> hours</td>
-		  </tr>
-		  <tr>
-			<td class="formlabel">Comment:</td>
-			<td><input type="text" name="comment" value="" size="80"/></td>
-		  </tr>
-		  <tr><td class="formlabel"><input id="keygensubmit" type="submit" value="create certificate" /></td><td/></tr>
-		</table>
-	  </form>
-	  <h3>Existing Certificates</h3>
-	  <form method="post" action="profile/deletekey">
-		<table>
-		  <tr><th>Delete</th><th>Certificate Details</th></tr>
-		  <input name="webId" id="webId" type="hidden" value={agent*} />
-		  <tbody>{
-			  for (key <- agent/-CERT.identity )
-				yield { val modulus = (key/RSA.modulus).as[BigInteger]
-						if (modulus == null)  <span/> //todo: broken public key, should delete it
-						else <tr><td><input type="checkbox" name="keyhash" value={modulus.hashCode().toString()}/></td>
-					<td><table>
-						<tr><td class="propvalue">Created:</td><td>{beautifyDate(key/DC.date )}</td></tr>
-						<tr><td class="propvalue">Comment:</td><td>{ key/RDFS.comment* }</td></tr>
-						<tr><td class="propvalue multiline">Modulus:</td><td><code>{ beautifyHex(key/RSA.modulus) }</code></td></tr>
-						<tr><td class="propvalue">Exponent:</td><td><code>{ beautifyInt(key/RSA.public_exponent) }</code></td></tr>
-						</table>
-					</td>
-							</tr>}
-			}</tbody>
-		</table>
-		<input type="submit" value="Disable Keys"/>
-	  </form>
-	  <p></p>
 
-	}
-
-	def roamingUser() = {
-	  <h3>Using remote profile</h3>
-		 <p>
-		{agent / FOAF.nick *}, you have accessed this site using your WebID
-			{"<" + (agent *) + ">"}
-			which has not been
-			created on this site.To edit your profile you should visit the site issuing the
-			profile.</p>
-	}
 
+	  def beautifyHex(dtIt: CollectedIter[RichGraphNode]): String = {
+		  if (0 == dtIt.size) return "warning! missing. Key invalid"
+		  //this is a problem, it should always be here or it is invalid, and key should be removed
+		  val bigint: BigInteger = dtIt.as[BigInteger]
+		  val bstr = bigint.toString(16).toUpperCase;
+		  val sbuf = new StringBuffer(bstr.size + (bstr.size/2)+10)
+		  var cnt = 0
+		  for (c <- bstr.toCharArray) {
+			if ((cnt % 2) == 0) sbuf.append(' ')
+			sbuf.append(c)
+			cnt += 1
+		  }
+		  sbuf.toString
+		}
 
 
 
-  def beautifyDate(dtIt: CollectedIter[RichGraphNode]) {
-	  if (0 == dtIt.size) return "_"
-	  DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.FULL).format(dtIt.as[Date])
-  }
-
-
-  def beautifyHex(dtIt: CollectedIter[RichGraphNode]): String = {
-	  if (0 == dtIt.size) return "warning! missing. Key invalid"
-	  //this is a problem, it should always be here or it is invalid, and key should be removed
-	  val bigint: BigInteger = dtIt.as[BigInteger]
-	  val bstr = bigint.toString(16).toUpperCase;
-	  val sbuf = new StringBuffer(bstr.size + (bstr.size/2)+10)
-	  var cnt = 0
-	  for (c <- bstr.toCharArray) {
-		if ((cnt % 2) == 0) sbuf.append(' ')
-		sbuf.append(c)
-		cnt += 1
+	  def beautifyInt(dtIt: CollectedIter[RichGraphNode] ) :String = {
+		  if (0 == dtIt.size) return "warning! missing. Key invalid"
+		  else return dtIt.as[BigInteger].toString
 	  }
-	  sbuf.toString
 	}
-
-
-
-  def beautifyInt(dtIt: CollectedIter[RichGraphNode] ) :String = {
-	  if (0 == dtIt.size) return "warning! missing. Key invalid"
-	  else return dtIt.as[BigInteger].toString
-  }
 }
 
 

Copied: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/SettingsPanel.scala (from r1143291, incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/settings_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/html/SettingsPanel.scala?p2=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/SettingsPanel.scala&p1=incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/settings_panel.scala&r1=1143291&r2=1143323&rev=1143323&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/pages/settings_panel.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/SettingsPanel.scala Wed Jul  6 10:01:59 2011
@@ -17,22 +17,19 @@
  * under the License.
  */
 
-package org.apache.clerezza.platform.accountcontrolpanel.pages
+package org.apache.clerezza.platform.accountcontrolpanel.html
 
 import org.apache.clerezza.rdf.scala.utils.Preamble._
 import org.apache.clerezza.platform.accountcontrolpanel.ontologies.CONTROLPANEL
 import org.apache.clerezza.platform.typerendering.scala._
 
 
-class settings_panel extends PageRenderlet {
+class SettingsPanel extends SRenderlet {
 
-	val rdfType = CONTROLPANEL.SettingsPage
-	override def mode = "naked"
+	val getRdfType = CONTROLPANEL.SettingsPage
 
-  	override def renderedPage(arguments: RenderedPage.Arguments): RenderedPage = {
- 		new RenderedPage(arguments) {
-
-			override def content = {
+  	override def renderedPage(arguments: XmlResult.Arguments) = new XmlResult(arguments ) {
+		override def content = {
 import org.apache.clerezza.rdf.core.UriRef
 import scala.xml.NodeBuffer
 import scala.collection.mutable.ListBuffer
@@ -161,7 +158,6 @@ nodeBuff +=(<h2>Change user's default la
 	}
 	</div>
 </div>
-      }
-    }
-  }
+		}
+	}
 }

Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_collection_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/html/ping_back_collection_panel.scala?rev=1143323&r1=1143291&r2=1143323&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_collection_panel.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_collection_panel.scala Wed Jul  6 10:01:59 2011
@@ -1,4 +1,4 @@
-package org.apache.clerezza.platform.accountcontrolpanel.pages
+package org.apache.clerezza.platform.accountcontrolpanel.html
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one

Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_item_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/html/ping_back_item_panel.scala?rev=1143323&r1=1143291&r2=1143323&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_item_panel.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_back_item_panel.scala Wed Jul  6 10:01:59 2011
@@ -1,4 +1,4 @@
-package org.apache.clerezza.platform.accountcontrolpanel.pages
+package org.apache.clerezza.platform.accountcontrolpanel.html
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one

Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_form_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/html/ping_form_panel.scala?rev=1143323&r1=1143291&r2=1143323&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_form_panel.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/html/ping_form_panel.scala Wed Jul  6 10:01:59 2011
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package org.apache.clerezza.platform.accountcontrolpanel.pages
+package org.apache.clerezza.platform.accountcontrolpanel.html
 
 
 import org.apache.clerezza.platform.accountcontrolpanel.ontologies.PINGBACK
@@ -82,8 +82,8 @@ class XmlPingForm(args: XmlResult.Argume
        //todo: add code in case to is on the document, not the object
 		<div id="tx-content">
 			<h2>Ping</h2>
-			<p>Ping {person_panel.getName(target)}
-			</p>{person_panel.getAgentPix(target)}
+			<p>Ping {PersonPanel.getName(target)}
+			</p>{PersonPanel.getAgentPix(target)}
 			<p>About
 				{source}
 			</p>

Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/permissions.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/permissions.scala?rev=1143323&r1=1143322&r2=1143323&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/permissions.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/permissions.scala Wed Jul  6 10:01:59 2011
@@ -20,58 +20,51 @@
 package org.apache.clerezza.platform.accountcontrolpanel
 
 import java.security.Permission
-import org.slf4j.{Logger, LoggerFactory}
+import org.slf4j.scala.Logging
 
 //note: file has lower class name, as it contains many classes
 
-/**
- *
- *
- * @author bblfish
- */
-
-object AbstractPermission {
-	private  val logger: Logger = LoggerFactory.getLogger(classOf[AbstractPermission])
-}
 
 /**
  * superclass for the permission classes, to avoid a lot of boilerplate code
  *
- * @author bblfish
+ * @author bblfish, reto
  */
-
-
 abstract
-class AbstractPermission(val accountName: String, val actions: String ="") extends Permission(accountName)  {
-	import AbstractPermission.logger
+class AbstractPermission(val accountName: String, val actions: String ="")
+	extends Permission(accountName) with Logging  {
+
+	if (actions != "") {
+		throw new RuntimeException(getClass.getName+": actions must be an empty String "+
+			"(second argument only in constructor for supporting building from canonical form")
+	}
 
 	def getActions: String = actions
 
 	/**
-	 * this overriding this method, one should create a canEquals method as described in "Programming in Scala" Book
-	 * by Martin Odersky, Lex Spoon, Bill Venners
+	 * A subclass implies another permission if and only if they are equals
 	 */
-	def canEqual(other: Any): Boolean
-
    override
 	def implies(permission: Permission): Boolean = {
-		logger.debug("checking for {} in {}", permission, this)
+		logger.debug("checking for "+permission+" is implied by "+ this)
 		var result: Boolean = equals(permission)
-		logger.debug("result {}", result)
 		return result
 	}
 
 	override
 	def equals(other: Any): Boolean =
 	    other match {
-			case that:  AbstractPermission  =>  ( that eq this ) || ( that.canEqual(this) && accountName == that.accountName )
+			case that:  AbstractPermission  =>  
+				(that eq this ) || ((this.getClass == that.getClass) && accountName == that.accountName )
 			case _ => false
 	    }
 
-  //todo: the hashes for same named account names of different types would be the same here
+	/**
+	 * For the hashCode the class and the accountName is considered
+	 */
 	override
 	def hashCode: Int = {
-		return  41 * (41 + (if (accountName != null) accountName.hashCode else 0))
+		return  getClass.hashCode + (if (accountName != null) accountName.hashCode else 0)
 	}
 }
 
@@ -83,9 +76,6 @@ class AbstractPermission(val accountName
 class ChangePasswordPermission(accountName: String, actions: String ="")
 	extends AbstractPermission(accountName, actions) {
 
-	def canEqual(other: Any): Boolean = other.isInstanceOf[ChangePasswordPermission]
-
-
 }
 
 /**
@@ -97,7 +87,6 @@ class ChangePasswordPermission(accountNa
 class AccountControlPanelAppPermission(accountName: String, actions: String ="")
 	extends AbstractPermission(accountName)  {
 
-	def canEqual(other: Any): Boolean = other.isInstanceOf[AccountControlPanelAppPermission]
 
 }
 
@@ -110,6 +99,5 @@ class AccountControlPanelAppPermission(a
 class UserBundlePermission( accountName: String, actions: String ="")
 	extends AbstractPermission(accountName)  {
 
-	def canEqual(other: Any): Boolean = other.isInstanceOf[UserBundlePermission]
 
 }
\ No newline at end of file