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/03/14 10:04:51 UTC
svn commit: r1081290 - in /incubator/clerezza/trunk/parent:
internal.archetype/src/main/resources/archetype-resources/
platform.accountcontrolpanel/platform.accountcontrolpanel.core/
platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/ma...
Author: bblfish
Date: Mon Mar 14 09:04:51 2011
New Revision: 1081290
URL: http://svn.apache.org/viewvc?rev=1081290&view=rev
Log:
Merge branch 'foaf'
Added:
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/person_panel.scala
Modified:
incubator/clerezza/trunk/parent/internal.archetype/src/main/resources/archetype-resources/pom.xml
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/pom.xml
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/profile_panel.scala
incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.ontologies/src/main/resources/org/apache/clerezza/platform/accountcontrolpanel/ontologies/controlpanel.rdf
incubator/clerezza/trunk/parent/platform.security.foafssl/core/pom.xml
incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/ssl/X509TrustManagerWrapperService.scala
incubator/clerezza/trunk/parent/platform.security.foafssl/test/pom.xml
incubator/clerezza/trunk/parent/platform.typerendering.scala/pom.xml
incubator/clerezza/trunk/parent/platform.typerendering.scala/src/main/scala/org/apache/clerezza/platform/typerendering/scala/RenderedPage.scala
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderer.java
incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderlet.java
incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebDescriptionProvider.scala
incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebIdGraphsService.scala
incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala
incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala
Modified: incubator/clerezza/trunk/parent/internal.archetype/src/main/resources/archetype-resources/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/internal.archetype/src/main/resources/archetype-resources/pom.xml?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/internal.archetype/src/main/resources/archetype-resources/pom.xml (original)
+++ incubator/clerezza/trunk/parent/internal.archetype/src/main/resources/archetype-resources/pom.xml Mon Mar 14 09:04:51 2011
@@ -6,11 +6,11 @@
<artifactId>main.parent</artifactId>
<version>0.5-incubating-SNAPSHOT</version>
</parent>
- <groupId>${groupId}</groupId>
- <artifactId>${artifactId}</artifactId>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>${project.artifactId}</artifactId>
<packaging>bundle</packaging>
- <version>${version}</version>
- <name>Clerezza - ${artifactId}</name>
+ <version>${project.version}</version>
+ <name>Clerezza - ${project.artifactId}</name>
<description>A clerezza project</description>
<dependencies>
<dependency>
Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/pom.xml?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/pom.xml (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/pom.xml Mon Mar 14 09:04:51 2011
@@ -45,7 +45,7 @@
<instructions>
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
<Export-Package>org.apache.clerezza.platform.accountcontrolpanel</Export-Package>
- <Bundle-SymbolicName>${groupId}.${artifactId}</Bundle-SymbolicName>
+ <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
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=1081290&r1=1081289&r2=1081290&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 Mon Mar 14 09:04:51 2011
@@ -33,13 +33,33 @@
</service>
<property name="javax.ws.rs" type="Boolean" value="true"/>
<property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.ProfilePanel"/>
- <reference name="userManager" interface="org.apache.clerezza.platform.usermanager.UserManager" cardinality="1..1" policy="static" bind="bindUserManager" unbind="unbindUserManager"/>
- <reference name="keygenSrvc" interface="org.apache.clerezza.ssl.keygen.KeygenService" cardinality="1..1" policy="static" bind="bindKeygenSrvc" unbind="unbindKeygenSrvc"/>
- <reference name="tcManager" interface="org.apache.clerezza.rdf.core.access.TcManager" cardinality="1..1" policy="static" bind="bindTcManager" unbind="unbindTcManager"/>
- <reference name="renderletManager" interface="org.apache.clerezza.platform.typerendering.RenderletManager" cardinality="1..1" policy="static" bind="bindRenderletManager" unbind="unbindRenderletManager"/>
- <reference name="webIdGraphsService" interface="org.apache.clerezza.platform.users.WebIdGraphsService" cardinality="1..1" policy="static" bind="bindWebIdGraphsService" unbind="unbindWebIdGraphsService"/>
- <reference name="platformConfig" interface="org.apache.clerezza.platform.config.PlatformConfig" cardinality="1..1" policy="static" bind="bindPlatformConfig" unbind="unbindPlatformConfig"/>
+ <reference name="userManager" interface="org.apache.clerezza.platform.usermanager.UserManager"
+ cardinality="1..1" policy="static" bind="bindUserManager" unbind="unbindUserManager"/>
+ <reference name="keygenSrvc" interface="org.apache.clerezza.ssl.keygen.KeygenService"
+ cardinality="1..1" policy="static" bind="bindKeygenSrvc" unbind="unbindKeygenSrvc"/>
+ <reference name="renderletManager" interface="org.apache.clerezza.platform.typerendering.RenderletManager"
+ cardinality="1..1" policy="static" bind="bindRenderletManager" unbind="unbindRenderletManager"/>
+ <reference name="webIdGraphsService" interface="org.apache.clerezza.platform.users.WebIdGraphsService"
+ cardinality="1..1" policy="static" bind="bindWebIdGraphsService" unbind="unbindWebIdGraphsService"/>
+ <reference name="platformConfig" interface="org.apache.clerezza.platform.config.PlatformConfig"
+ cardinality="1..1" policy="static" bind="bindPlatformConfig" unbind="unbindPlatformConfig"/>
+ <reference name="webDescriptionProvider" interface="org.apache.clerezza.platform.users.WebDescriptionProvider"
+ cardinality="1..1" policy="static" bind="bindWebDescriptionProvider" unbind="unbindWebDescriptionProvider"/>
</scr:component>
+ <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.PersonPanel">
+ <implementation class="org.apache.clerezza.platform.accountcontrolpanel.PersonPanel"/>
+ <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"/>
+ <reference name="webIdGraphsService" interface="org.apache.clerezza.platform.users.WebIdGraphsService"
+ cardinality="1..1" policy="static" bind="bindWebIdGraphsService" unbind="unbindWebIdGraphsService"/>
+ <reference name="webDescriptionProvider" interface="org.apache.clerezza.platform.users.WebDescriptionProvider"
+ cardinality="1..1" policy="static" bind="bindWebDescriptionProvider" unbind="unbindWebDescriptionProvider"/>
+ <reference name="renderletManager" interface="org.apache.clerezza.platform.typerendering.RenderletManager"
+ cardinality="1..1" policy="static" bind="bindRenderletManager" unbind="unbindRenderletManager"/>
+ </scr:component>
<scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.profile_panel">
<implementation class="org.apache.clerezza.platform.accountcontrolpanel.profile_panel"/>
<service servicefactory="false">
@@ -56,4 +76,12 @@
<property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.settings_panel"/>
<reference name="renderletManager" interface="org.apache.clerezza.platform.typerendering.RenderletManager" cardinality="1..1" policy="static" bind="bindRenderletManager" unbind="unbindRenderletManager"/>
</scr:component>
+ <scr:component enabled="true" name="org.apache.clerezza.platform.accountcontrolpanel.person_panel">
+ <implementation class="org.apache.clerezza.platform.accountcontrolpanel.person_panel"/>
+ <service servicefactory="false">
+ <provide interface="org.apache.clerezza.platform.typerendering.Renderlet"/>
+ </service>
+ <property name="service.pid" value="org.apache.clerezza.platform.accountcontrolpanel.person_panel"/>
+ <reference name="renderletManager" interface="org.apache.clerezza.platform.typerendering.RenderletManager" cardinality="1..1" policy="static" bind="bindRenderletManager" unbind="unbindRenderletManager"/>
+ </scr:component>
</components>
Added: 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/PersonPanel.scala?rev=1081290&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala (added)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/PersonPanel.scala Mon Mar 14 09:04:51 2011
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.platform.accountcontrolpanel
+
+import java.util.ArrayList
+import java.util.Arrays
+import java.util.Iterator
+import org.apache.clerezza.platform.security.UserUtil
+import org.apache.clerezza.ssl.keygen.CertSerialisation
+import org.apache.clerezza.ssl.keygen.Certificate
+import org.apache.clerezza.foafssl.ontologies.CERT
+import org.apache.clerezza.foafssl.ontologies.RSA
+import org.apache.clerezza.jaxrs.utils.RedirectUtil
+import org.apache.clerezza.jaxrs.utils.TrailingSlash
+import org.apache.clerezza.platform.accountcontrolpanel.ontologies.CONTROLPANEL
+import org.apache.clerezza.platform.config.PlatformConfig
+import org.apache.clerezza.platform.typerendering.RenderletManager
+import org.apache.clerezza.platform.typerendering.scalaserverpages.ScalaServerPagesRenderlet
+import org.apache.clerezza.platform.usermanager.UserManager
+import org.apache.clerezza.rdf.core._
+import org.apache.clerezza.rdf.core.access.TcManager
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph
+import org.apache.clerezza.rdf.core.impl.TripleImpl
+import org.apache.clerezza.rdf.ontologies.DC
+import org.apache.clerezza.rdf.ontologies.FOAF
+import org.apache.clerezza.rdf.ontologies.PLATFORM
+import org.apache.clerezza.rdf.ontologies.RDF
+import org.apache.clerezza.rdf.utils.GraphNode
+import org.apache.clerezza.rdf.utils.UnionMGraph
+import org.apache.clerezza.web.fileserver.FileServer
+import org.apache.felix.scr.annotations.Component
+import org.apache.felix.scr.annotations.Property
+import org.apache.felix.scr.annotations.Reference
+import org.apache.felix.scr.annotations.Service
+import org.osgi.service.component.ComponentContext
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import javax.ws.rs._
+import javax.ws.rs.core.Context
+import javax.ws.rs.core.MediaType
+import javax.ws.rs.core.Response
+import javax.ws.rs.core.UriInfo
+import java.math.BigInteger
+import java.net.URL
+import java.security.AccessController
+import java.security.PrivilegedAction
+import java.security.interfaces.RSAPublicKey
+import java.util.List
+import org.apache.clerezza.platform.typerendering.scala.PageRenderlet
+import org.apache.clerezza.rdf.ontologies.RDFS
+import org.apache.clerezza.ssl.keygen.KeygenService
+import org.apache.clerezza.platform.users.{Cache, WebDescriptionProvider, WebIdGraphsService}
+
+object PersonPanel {
+ private val logger: Logger = LoggerFactory.getLogger(classOf[ProfilePanel])
+}
+
+/**
+ * Presents a panel where the user can create a webid and edit her profile.
+ *
+ * @author bblfish
+ */
+@Path("/user/{id}/people")
+class PersonPanel {
+
+ import PersonPanel.logger
+
+ protected def activate(componentContext: ComponentContext): Unit = {
+// this.componentContext = componentContext.
+ }
+
+ @GET
+ def viewPerson(@Context uriInfo: UriInfo,
+ @QueryParam("uri") uri: UriRef): GraphNode = {
+ if (uri != null) {//show some error page
+ System.out.println("uri =="+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...
+
+
+ //Here we make a BNode the subject of the properties as a workaround to CLEREZZA-447
+ val resultNode: GraphNode = new GraphNode(new UriRef(uriInfo.getRequestUri().toString),new SimpleMGraph())
+ resultNode.addProperty(RDF.`type`, PLATFORM.HeadedPage)
+ resultNode.addProperty(RDF.`type`, CONTROLPANEL.ProfileViewerPage)
+ resultNode.addProperty(FOAF.primaryTopic,uri)
+// val result = new GraphNode(new UriRef(uri.getUnicodeString),resultNode.fetchSemantics)
+ return resultNode
+ }
+
+ protected def bindWebIdGraphsService(webidgraphsservice: WebIdGraphsService): Unit = {
+ webIdGraphsService = webidgraphsservice
+ }
+
+ protected def unbindWebIdGraphsService(webidgraphsservice: WebIdGraphsService): Unit = {
+ if (webIdGraphsService == webidgraphsservice) {
+ webIdGraphsService = null
+ }
+ }
+
+ protected def bindWebDescriptionProvider(descriptionProvider: WebDescriptionProvider) = {
+ this.descriptionProvider = descriptionProvider
+ }
+
+ protected def unbindWebDescriptionProvider(descriptionProvider: WebDescriptionProvider) = {
+ if (descriptionProvider == this.descriptionProvider) {
+ this.descriptionProvider = null
+ }
+ }
+
+
+ protected def bindRenderletManager(renderletmanager: RenderletManager): Unit = {
+ renderletManager = renderletmanager
+ }
+
+ protected def unbindRenderletManager(renderletmanager: RenderletManager): Unit = {
+ if (renderletManager == renderletmanager) {
+ renderletManager = null
+ }
+ }
+
+
+ //
+ //needed by code
+ //
+ private var descriptionProvider: WebDescriptionProvider = null
+ private var webIdGraphsService: WebIdGraphsService = null
+
+ //
+ //needed by framework
+ //
+
+ //called by the ssp, web component
+ private var renderletManager: RenderletManager = null
+
+ //set in activate. But is it useful to keep an pointer to it?
+ //private var componentContext: ComponentContext = null
+
+}
\ No newline at end of file
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=1081290&r1=1081289&r2=1081290&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 Mon Mar 14 09:04:51 2011
@@ -18,7 +18,7 @@
*/
package org.apache.clerezza.platform.accountcontrolpanel
-import java.util.ArrayList
+import java.util.List
import java.util.Arrays
import java.util.Iterator
import org.apache.clerezza.platform.security.UserUtil
@@ -33,7 +33,6 @@ import org.apache.clerezza.platform.conf
import org.apache.clerezza.platform.typerendering.RenderletManager
import org.apache.clerezza.platform.typerendering.scalaserverpages.ScalaServerPagesRenderlet
import org.apache.clerezza.platform.usermanager.UserManager
-import org.apache.clerezza.platform.users.WebIdGraphsService
import org.apache.clerezza.rdf.core._
import org.apache.clerezza.rdf.core.access.TcManager
import org.apache.clerezza.rdf.core.impl.SimpleMGraph
@@ -62,31 +61,30 @@ import java.net.URL
import java.security.AccessController
import java.security.PrivilegedAction
import java.security.interfaces.RSAPublicKey
-import java.util.List
import org.apache.clerezza.platform.typerendering.scala.PageRenderlet
import org.apache.clerezza.rdf.ontologies.RDFS
import org.apache.clerezza.ssl.keygen.KeygenService
+import org.apache.clerezza.platform.users.{WebDescriptionProvider, WebIdGraphsService}
+
+object ProfilePanel {
+ private val logger: Logger = LoggerFactory.getLogger(classOf[ProfilePanel])
+}
/**
* Presents a panel where the user can create a webid and edit her profile.
*
* @author reto
*/
-@Path("/user/{id}/profile")
-object ProfilePanel {
- private val logger: Logger = LoggerFactory.getLogger(classOf[ProfilePanel])
-}
@Path("/user/{id}/profile")
-class ProfilePanel extends FileServer {
+class ProfilePanel {
+
import ProfilePanel.logger
- protected def activate(componentContext: ComponentContext): Unit = {
- configure(componentContext.getBundleContext, "profile-staticweb")
- }
@GET
- def getPersonalProfilePage(@Context uriInfo: UriInfo, @PathParam(value = "id") userName: String): GraphNode = {
+ def getPersonalProfilePage(@Context uriInfo: UriInfo,
+ @PathParam(value = "id") userName: String): GraphNode = {
TrailingSlash.enforceNotPresent(uriInfo)
var resultNode: GraphNode = getPersonalProfile(userName, new UriRef(uriInfo.getAbsolutePath.toString))
resultNode.addProperty(RDF.`type`, PLATFORM.HeadedPage)
@@ -94,7 +92,8 @@ class ProfilePanel extends FileServer {
return resultNode
}
- private def getPersonalProfile(userName: String, profile: UriRef): GraphNode = {
+ private def getPersonalProfile(userName: String,
+ profile: UriRef): GraphNode = {
return AccessController.doPrivileged(new PrivilegedAction[GraphNode] {
def run: GraphNode = {
var userInSystemGraph: GraphNode = userManager.getUserInSystemGraph(userName)
@@ -143,7 +142,10 @@ class ProfilePanel extends FileServer {
}
@POST
- @Path("set-existing-webid") def setExistingWebId(@Context uriInfo: UriInfo, @FormParam("webid") webId: UriRef, @PathParam(value = "id") userName: String): Response = {
+ @Path("set-existing-webid")
+ def setExistingWebId(@Context uriInfo: UriInfo,
+ @FormParam("webid") webId: UriRef,
+ @PathParam(value = "id") userName: String): Response = {
return AccessController.doPrivileged(new PrivilegedAction[Response] {
def run: Response = {
var userInSystemGraph: GraphNode = userManager.getUserInSystemGraph(userName)
@@ -154,7 +156,9 @@ class ProfilePanel extends FileServer {
}
@POST
- @Path("create-new-web-id") def createNewWebId(@Context uriInfo: UriInfo, @PathParam(value = "id") userName: String): Response = {
+ @Path("create-new-web-id")
+ def createNewWebId(@Context uriInfo: UriInfo,
+ @PathParam(value = "id") userName: String): Response = {
val ppd: UriRef = getSuggestedPPDUri(userName)
val webId: UriRef = new UriRef(ppd.getUnicodeString + "#me")
val webIdGraphs: WebIdGraphsService#WebIdGraphs = webIdGraphsService.getWebIdGraphs(webId)
@@ -169,24 +173,38 @@ class ProfilePanel extends FileServer {
}
@POST
- @Path("addContact") def addContact(@Context uriInfo: UriInfo, @FormParam("webId") contactWebID: UriRef): Response = {
- if (contactWebID != null) {
+ @Path("addContact")
+ def addContact(@Context uriInfo: UriInfo,
+ @FormParam("webId") newContacts: java.util.List[UriRef]): Response = {
+ import collection.JavaConversions._
+ if (newContacts.size >0) {
val userName: String = UserUtil.getCurrentUserName
var me: GraphNode = AccessController.doPrivileged(new PrivilegedAction[GraphNode] {
def run: GraphNode = {
return userManager.getUserGraphNode(userName)
}
})
- val webIdGraphs: WebIdGraphsService#WebIdGraphs = webIdGraphsService.getWebIdGraphs(me.getNode.asInstanceOf[UriRef])
- var meGrph: GraphNode = new GraphNode(me.getNode, webIdGraphs.localGraph)
- webIdGraphsService.getWebIdGraphs(contactWebID)
- meGrph.addProperty(FOAF.knows, contactWebID)
+ for (contactWebID <- newContacts) {
+ val webIdGraphs: WebIdGraphsService#WebIdGraphs = webIdGraphsService.getWebIdGraphs(me.getNode.asInstanceOf[UriRef])
+ var meGrph: GraphNode = new GraphNode(me.getNode, webIdGraphs.localGraph)
+ webIdGraphsService.getWebIdGraphs(contactWebID)
+ meGrph.addProperty(FOAF.knows, contactWebID)
+ } //todo: one should catch errors here (bad uris sent for ex
}
return RedirectUtil.createSeeOtherResponse("../profile", uriInfo)
}
+
@POST
- @Path("keygen") def createCert(@FormParam("webId") webId: UriRef, @FormParam("cn") commonName: String, @FormParam("spkac") spkac: String, @FormParam("crmf") crmf: String, @FormParam("hours") hours: String, @FormParam("days") days: String, @FormParam("csr") csr: String, @FormParam("comment") comment: String): Response = {
+ @Path("keygen")
+ def createCert(@FormParam("webId") webId: UriRef,
+ @FormParam("cn") commonName: String,
+ @FormParam("spkac") spkac: String,
+ @FormParam("crmf") crmf: String,
+ @FormParam("hours") hours: String,
+ @FormParam("days") days: String,
+ @FormParam("csr") csr: String,
+ @FormParam("comment") comment: String): Response = {
logger.info("in keygen code. webId={}", webId)
logger.info("cn={}", commonName)
logger.info("hours={}", hours)
@@ -255,9 +273,10 @@ class ProfilePanel extends FileServer {
val webIdGraphs: WebIdGraphsService#WebIdGraphs = webIdGraphsService.getWebIdGraphs(webId)
val agent: GraphNode = new GraphNode(webId, webIdGraphs.localGraph)
var subjects: Iterator[GraphNode] = agent.getSubjectNodes(CERT.identity)
- import scala.util.control.Breaks._
+ import scala.util.control.Breaks._
breakable {
- import scala.collection.JavaConversions._ //to for loop through iterators
+ import scala.collection.JavaConversions._
+ //to for loop through iterators
for (nl <- subjects) {
var modulusIt: Iterator[Resource] = nl.getObjects(RSA.modulus)
if (!modulusIt.hasNext) break
@@ -316,16 +335,6 @@ class ProfilePanel extends FileServer {
}
}
- protected def bindTcManager(tcmanager: TcManager): Unit = {
- tcManager = tcmanager
- }
-
- protected def unbindTcManager(tcmanager: TcManager): Unit = {
- if (tcManager == tcmanager) {
- tcManager = null
- }
- }
-
protected def bindRenderletManager(renderletmanager: RenderletManager): Unit = {
renderletManager = renderletmanager
}
@@ -356,10 +365,33 @@ class ProfilePanel extends FileServer {
}
}
+ protected def bindWebDescriptionProvider(descriptionProvider: WebDescriptionProvider) = {
+ this.descriptionProvider = descriptionProvider
+ }
+
+ protected def unbindWebDescriptionProvider(descriptionProvider: WebDescriptionProvider) = {
+ if (descriptionProvider == this.descriptionProvider) {
+ this.descriptionProvider = null
+ }
+ }
+
+ protected def activate(componentContext: ComponentContext): Unit = {
+ this.componentContext = componentContext
+ }
+
+
private var userManager: UserManager = null
- private var keygenSrvc: KeygenService = null
- private var tcManager: TcManager = null
- private var renderletManager: RenderletManager = null
+
+ //todo: does one need both of these?
private var webIdGraphsService: WebIdGraphsService = null
+ private var descriptionProvider: WebDescriptionProvider = null
+
+ private var keygenSrvc: KeygenService = null
private var platformConfig: PlatformConfig = null
+
+ //todo: are these this needed? It's not used it seems
+ private var renderletManager: RenderletManager = null
+
+ private var componentContext: ComponentContext = null
+
}
\ No newline at end of file
Added: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/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/person_panel.scala?rev=1081290&view=auto
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/person_panel.scala (added)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/person_panel.scala Mon Mar 14 09:04:51 2011
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.clerezza.platform.accountcontrolpanel
+
+import org.apache.clerezza.rdf.core._
+import org.apache.clerezza.rdf.scala.utils._
+import org.apache.clerezza.rdf.scala.utils.Preamble._
+import org.apache.clerezza.platform.typerendering.scala._
+import org.apache.clerezza.rdf.core.UriRef
+import org.apache.clerezza.platform.accountcontrolpanel.ontologies.CONTROLPANEL
+import org.apache.clerezza.rdf.utils.GraphNode
+import org.apache.clerezza.rdf.ontologies.{RDFS, RDF, FOAF}
+import xml.{NodeSeq, NodeBuffer, Text, Node}
+import java.net.{URLEncoder, URL}
+
+object person_panel {
+ final val emptyText = new Text("")
+
+ def ifE[T](arg:T)(template: T=>Node ):NodeSeq = {
+ def isEmpty(arg: Any): Boolean = {
+ arg match {
+ case prod: Product => prod.productIterator.forall(isEmpty(_))
+ case str: String => (str.size == 0)
+ case it: CollectedIter[RichGraphNode] => (it.size == 0)
+ case node: RichGraphNode => (null == node)
+ case other: AnyRef => (null == other)
+ case _ => false //literals can't be empty
+ }
+ }
+ if (isEmpty(arg)) return emptyText else template(arg)
+ }
+
+ def firstOf(node: RichGraphNode, uris: UriRef*):CollectedIter[RichGraphNode] = {
+ for (uri <- uris) {
+ val res : CollectedIter[RichGraphNode] = node/uri
+ if (res.size>0) return res
+ }
+ return new CollectedIter[RichGraphNode]()
+ }
+
+ /**
+ * Show a person: a picture, a link to their local profile and their name
+ * Different default icons should be shown if the agent is a person, company, group, robot...
+ *
+ * assumes the p is WebID node (can change later)
+ */
+ def personInABox(p: RichGraphNode): NodeSeq = {
+ val pix = firstOf(p, FOAF.depiction, FOAF.logo).getNode match {
+ case uri: UriRef => uri.getUnicodeString
+ case _ => "http://upload.wikimedia.org/wikipedia/commons/0/0a/Gnome-stock_person.svg"
+ }
+
+ val pixml= { <a href={"people?uri="+encode(p*)}><img src={pix} width="70px" /></a> }
+ return pixml ++ new Text(getName(p))
+ }
+
+ def encode(url: String): String = URLEncoder.encode(url,"UTF8")
+
+ /**
+ * get a useable name from the properties available including nick
+ */
+ def getName(p: RichGraphNode): String = {
+ val name = p/FOAF.name*;
+ if ("" != name ) { return name }
+ val firstNm: String = p/FOAF.firstName*;
+ val fmlyNm :String = firstOf(p, FOAF.family_name,FOAF.familyName)*;
+ if ("" != firstNm || "" != fmlyNm) { return firstNm+" "+fmlyNm }
+ return p*
+
+ }
+
+ def personHtml(p: RichGraphNode): NodeSeq = {
+ {<tr><td colspan="2">Person</td></tr>}++
+ ifE(p!){case f:UriRef=>(<tr><td><input type="checkbox" name="webId" value={p*}/>Add as contact</td><td><a href={p*}>{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.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 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 linkNlabel(res: RichGraphNode): Node = {
+ var label: String = res/RDFS.label! match {
+ case uri: UriRef => uri.toString
+ case _ => res*
+ }
+ return <a href={res*}>{label}</a>
+ }
+
+ def agentHtml(agent: RichGraphNode) = {<table>{
+ ifE({agent/FOAF.name}){ case (f)=>(<tr><td>Name:</td><td>{f}</td></tr>)}++
+ ifE(agent/FOAF.logo*){f=>(<tr><td>Logo:</td><td><img src={f} /></td></tr>)}
+ }</table> }
+
+}
+
+class person_panel extends PageRenderlet {
+ val rdfType = CONTROLPANEL.ProfileViewerPage
+ override def mode = "naked"
+ import person_panel._
+
+
+ override def renderedPage(arguments: RenderedPage.Arguments): RenderedPage = {
+ new RenderedPage(arguments) {
+
+ override def 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)
+ resultDocModifier.addStyleSheet("profile/style/profile.css");
+ resultDocModifier.setTitle("Profile Viewer");
+ resultDocModifier.addNodes2Elem("tx-module", <h1>Account Control Panel</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>);
+
+ val it: CollectedIter[RichGraphNode] = res / FOAF.primaryTopic
+ val primeTpc: RichGraphNode = it.apply(0)
+ val agent : RichGraphNode= primeTpc! match {
+ case uri : UriRef => fetch(uri)
+ case _ => res
+ }
+
+ 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>
+ }
+
+
+ def allAgentsHtml(tc: TripleCollection): Node = {<span>
+ <th><tr colspan="2">All agents found</tr></th>
+ { import collection.JavaConversions._
+ val base = new URL(primeTpc.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>}
+
+ <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>
+ <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>
+ }
+
+ }
+ }
+}
+
+
Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/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/profile_panel.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/profile_panel.scala (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.core/src/main/scala/org/apache/clerezza/platform/accountcontrolpanel/profile_panel.scala Mon Mar 14 09:04:51 2011
@@ -27,6 +27,7 @@ import java.text._
import org.apache.clerezza.rdf.core.UriRef
import org.apache.clerezza.platform.accountcontrolpanel.ontologies.CONTROLPANEL
import org.apache.clerezza.rdf.ontologies.{RDFS, DC, FOAF}
+import org.apache.clerezza.rdf.utils.GraphNode
class profile_panel extends PageRenderlet {
val rdfType = CONTROLPANEL.ProfilePage
@@ -123,16 +124,22 @@ class profile_panel extends PageRenderle
</form>
<h3>Contacts</h3>
-
- <table>{for (friend <- agent/FOAF.knows) {
- <tr><td>{friend*}</td></tr>
- }
- <tr><td><form id="addContact" method="post" action="profile/addContact">
- <input type="text" name="webId" size="80"/>
- <input type="submit" value="add contact" />
- </form></td></tr>
- }</table>
-
+ <form id="addContact" method="get" action="people">
+ <table>{ var i =0
+ val friends = for (friend <- agent/FOAF.knows) yield {
+ import person_panel._
+ val node = friend.getNode() match {
+ case uri: UriRef => personInABox(fetch(uri))
+ case _ => emptyText //one could show info with bnodes too...
+ }
+ <td>{node}</td>
+ }
+ for (row <- friends.grouped(5)) yield <tr>{row}</tr>
+ }<tr> <td><input type="submit" value="add contact" /></td>
+ <td><input type="text" name="uri" size="80"/><!-- human input forms cannot require precise WebIds-->
+ </td></tr>
+ </table>
+ </form>
<h3>Key and Certificate Creation</h3>
@@ -220,12 +227,13 @@ class profile_panel extends PageRenderle
profile.</p>
}
- <div id="tx-content">
+ <div id="tx-content">
<h2>Personal Profile</h2>{agent ! match {
- case _: BNode => createWebId()
- case _: UriRef => existingWebId()
- }}
- </div>
+ case _: BNode => createWebId()
+ case _: UriRef => existingWebId()
+ }}
+ </div>
+
}
}
}
@@ -244,7 +252,7 @@ class profile_panel extends PageRenderle
val sbuf = new StringBuffer(bstr.size + (bstr.size/2)+10)
var cnt = 0
for (c <- bstr.toCharArray) {
- if ((cnt % 2) == 0) { sbuf.append(' ') }
+ if ((cnt % 2) == 0) sbuf.append(' ')
sbuf.append(c)
cnt += 1
}
Modified: incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.ontologies/src/main/resources/org/apache/clerezza/platform/accountcontrolpanel/ontologies/controlpanel.rdf
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.ontologies/src/main/resources/org/apache/clerezza/platform/accountcontrolpanel/ontologies/controlpanel.rdf?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.ontologies/src/main/resources/org/apache/clerezza/platform/accountcontrolpanel/ontologies/controlpanel.rdf (original)
+++ incubator/clerezza/trunk/parent/platform.accountcontrolpanel/platform.accountcontrolpanel.ontologies/src/main/resources/org/apache/clerezza/platform/accountcontrolpanel/ontologies/controlpanel.rdf Mon Mar 14 09:04:51 2011
@@ -35,6 +35,15 @@
<rdfs:isDefinedBy rdf:resource="http://clerezza.org/2009/03/controlpanel#" />
</rdfs:Class>
+<rdfs:Class rdf:about="#ProfileViewerPage">
+ <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
+ <rdfs:label xml:lang="en">profile viewer page</rdfs:label>
+ <skos:definition xml:lang="en">A web page for viewing profiles of agents (individuals or groups) information on the
+ web. Should allow a logged in user to add them as contacts
+ </skos:definition>
+ <rdfs:isDefinedBy rdf:resource="http://clerezza.org/2009/03/controlpanel#" />
+</rdfs:Class>
+
<!-- Properties -->
<rdf:Property rdf:about="#userBundlePermission">
Modified: incubator/clerezza/trunk/parent/platform.security.foafssl/core/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security.foafssl/core/pom.xml?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security.foafssl/core/pom.xml (original)
+++ incubator/clerezza/trunk/parent/platform.security.foafssl/core/pom.xml Mon Mar 14 09:04:51 2011
@@ -100,7 +100,7 @@
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
<Export-Package>!org.apache.clerezza.foafssl.ontologies,
org.apache.clerezza.foafssl.*</Export-Package>
- <Bundle-SymbolicName>${groupId}.${artifactId}</Bundle-SymbolicName>
+ <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
Modified: incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/ssl/X509TrustManagerWrapperService.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/ssl/X509TrustManagerWrapperService.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/ssl/X509TrustManagerWrapperService.scala (original)
+++ incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/ssl/X509TrustManagerWrapperService.scala Mon Mar 14 09:04:51 2011
@@ -30,7 +30,6 @@ import java.security.interfaces.RSAPubli
import java.util.Date
import javax.net.ssl.X509TrustManager;
import org.apache.clerezza.foafssl.Utilities
-import org.apache.clerezza.platform.users.WebDescriptionProvider
import org.apache.clerezza.foafssl.ontologies.CERT
import org.apache.clerezza.foafssl.ontologies.RSA
import org.apache.clerezza.platform.Constants
@@ -56,7 +55,8 @@ import org.apache.clerezza.rdf.ontologie
import org.apache.clerezza.rdf.scala.utils.Preamble._
import org.jsslutils.sslcontext.X509TrustManagerWrapper
import org.jsslutils.sslcontext.trustmanagers.TrustAllClientsWrappingTrustManager
-import org.slf4j.LoggerFactory;
+import org.slf4j.LoggerFactory
+import org.apache.clerezza.platform.users.{Cache, WebDescriptionProvider}
class X509TrustManagerWrapperService() extends X509TrustManagerWrapper {
@@ -117,11 +117,11 @@ class X509TrustManagerWrapperService() e
private val systemGraphUri = Constants.SYSTEM_GRAPH_URI;
private def verify(uriRef: UriRef, publicKey: PublicKey): Unit = {
- var webDescription = descriptionProvider.getWebDescription(uriRef, false)
+ var webDescription = descriptionProvider.getWebDescription(uriRef, Cache.CacheOnly)
if (
!verify(uriRef, publicKey, webDescription.getGraph)
) {
- webDescription = descriptionProvider.getWebDescription(uriRef, true)
+ webDescription = descriptionProvider.getWebDescription(uriRef, Cache.ForceUpdate)
if (
!verify(uriRef, publicKey, webDescription.getGraph)
) throw new CertificateException
Modified: incubator/clerezza/trunk/parent/platform.security.foafssl/test/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security.foafssl/test/pom.xml?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security.foafssl/test/pom.xml (original)
+++ incubator/clerezza/trunk/parent/platform.security.foafssl/test/pom.xml Mon Mar 14 09:04:51 2011
@@ -107,7 +107,7 @@
<instructions>
<Service-Component>OSGI-INF/serviceComponents.xml</Service-Component>
<Export-Package>org.apache.clerezza.foafssl.testservlets</Export-Package>
- <Bundle-SymbolicName>${groupId}.${artifactId}</Bundle-SymbolicName>
+ <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
Modified: incubator/clerezza/trunk/parent/platform.typerendering.scala/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering.scala/pom.xml?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.typerendering.scala/pom.xml (original)
+++ incubator/clerezza/trunk/parent/platform.typerendering.scala/pom.xml Mon Mar 14 09:04:51 2011
@@ -28,6 +28,10 @@
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.clerezza</groupId>
+ <artifactId>platform.users.core</artifactId>
+ </dependency>
</dependencies>
<build>
Modified: incubator/clerezza/trunk/parent/platform.typerendering.scala/src/main/scala/org/apache/clerezza/platform/typerendering/scala/RenderedPage.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering.scala/src/main/scala/org/apache/clerezza/platform/typerendering/scala/RenderedPage.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.typerendering.scala/src/main/scala/org/apache/clerezza/platform/typerendering/scala/RenderedPage.scala (original)
+++ incubator/clerezza/trunk/parent/platform.typerendering.scala/src/main/scala/org/apache/clerezza/platform/typerendering/scala/RenderedPage.scala Mon Mar 14 09:04:51 2011
@@ -5,7 +5,6 @@ import java.io.PrintWriter
import java.net.URI
import javax.ws.rs.core.HttpHeaders
import javax.ws.rs.core.MediaType
-import org.osgi.framework.BundleContext
import scala.xml._
import org.apache.clerezza.platform.typerendering._
import org.apache.clerezza.platform.typerendering.Renderlet.RequestProperties
@@ -14,14 +13,18 @@ import org.apache.clerezza.rdf.ontologie
import org.apache.clerezza.rdf.core._
import org.apache.clerezza.rdf.utils._
import org.apache.clerezza.rdf.scala.utils.Preamble._
-
+import java.security.{PrivilegedAction, AccessController}
+import org.osgi.framework.{BundleContext, ServiceReference}
+import org.apache.clerezza.platform.users.{WebDescriptionProvider, Cache}
+import org.apache.clerezza.rdf.scala.utils.RichGraphNode
/**
* PageRenderlet.renderedPage returns an instance of this class, implementing
- * the content method to produce an XML Elmenet suitable as response to the
+ * the content method to produce an XML Element suitable as response to the
* request yielding to the arguments passed to the constructor.
*/
abstract class RenderedPage(arguments: RenderedPage.Arguments) {
+
val RenderedPage.Arguments(
res: GraphNode,
context: GraphNode,
@@ -41,32 +44,59 @@ abstract class RenderedPage(arguments: R
val requestHeaders = requestProperties.getRequestHeaders
val responseHeaders = requestProperties.getResponseHeaders
- def render(resource : GraphNode) : Seq[Node] = {
+ def render(resource: GraphNode): Seq[Node] = {
modeOption match {
case Some(m) => render(resource, m)
case None => render(resource, "naked")
}
}
- def render(resource : GraphNode, mode : String) = {
- def parseNodeSeq(string : String) = {
- _root_.scala.xml.XML.loadString("<elem>"+string+"</elem>").child
+ def render(resource: GraphNode, mode: String) = {
+ def parseNodeSeq(string: String) = {
+ _root_.scala.xml.XML.loadString("<elem>" + string + "</elem>").child
}
val baos = new java.io.ByteArrayOutputStream
renderer.render(resource, context, mode, baos)
parseNodeSeq(new String(baos.toByteArray))
}
+ def fetch(uri: UriRef) : GraphNode = {
+ val webSrvc = AccessController.doPrivileged(new PrivilegedAction[WebDescriptionProvider] {
+ def run: WebDescriptionProvider = {
+ val cntxt: BundleContext = requestProperties.bundleContext
+ var serviceReference: ServiceReference = cntxt.getServiceReference("org.apache.clerezza.platform.users.WebDescriptionProvider")
+ if (serviceReference != null) {
+ return cntxt.getService(serviceReference).asInstanceOf[WebDescriptionProvider]
+ } else {
+ return null
+ }
+ }
+ })
+ //This should return not a graph, but a graph surrounded with HTTP metadata, so that the user
+ //connection error messages can be designed, and so on.
+ //The graph should be fetched as the user also if this is required.
+ val grph = webSrvc.fetchSemantics(uri,Cache.Fetch)
+ return new GraphNode(uri,grph)
+ }
+
+ /**
+ * This is an object that allows one to use some nice shortcuts in scala based subclasses
+ * - $variable will get the value of the sharedRenderingValues hash
+ * - $variable = value allows one to update the sharedRenderingValues hash
+ * - $? not sure there...
+ */
object $ {
def apply(key: String) = sharedRenderingValues.get(key)
+
def update(key: String, value: Object) = sharedRenderingValues.put(key, value)
+
def apply[T](implicit m: Manifest[T]): T = {
val clazz = m.erasure.asInstanceOf[Class[T]]
requestProperties.getRenderingService(clazz)
}
}
- def ifx[T](con: => Boolean)(f: => T) : T = {
+ def ifx[T](con: => Boolean)(f: => T): T = {
if (con) f else null.asInstanceOf[T]
}
@@ -82,17 +112,38 @@ abstract class RenderedPage(arguments: R
)
out.flush()
- def content : AnyRef;
+ /**
+ * This is the main method/variable that needs to be implemented by subclasses
+ */
+ def content: AnyRef;
}
+
object RenderedPage {
- case class Arguments(res: GraphNode, context: GraphNode,
- sharedRenderingValues: java.util.Map[String, Object],
- renderer: CallbackRenderer ,
- renderingSpecificationOption: Option[URI],
- modeOption: Option[String],
- mediaType: MediaType,
- requestProperties: RequestProperties,
- os: OutputStream);
+
+ /**
+ * Class to encapsulate information sent to the rendering engine.
+ *
+ * @param res RDF resource to be rendered with the template.
+ * @param context RDF resource providing a rendering context.
+ * @param sharedRenderingValues a map that can be used for sharing values
+ * across the different Renderlets involved in a rendering process
+ * @param callbackRenderer renderer for call backs.
+ * @param renderingSpecification the rendering specification
+ * @param modeOption the mode this Renderlet was invoked with, this is mainly used
+ * so that the callbackRenderer can be claeed inheriting the mode.
+ * @param mediaType the media type this media produces (a part of)
+ * @param requestProperties properties of the http request, may be null
+ * @param os where the output will be written to.
+ */
+ case class Arguments(res: GraphNode,
+ context: GraphNode,
+ sharedRenderingValues: java.util.Map[String, Object],
+ renderer: CallbackRenderer,
+ renderingSpecificationOption: Option[URI],
+ modeOption: Option[String],
+ mediaType: MediaType,
+ requestProperties: RequestProperties,
+ os: OutputStream);
}
\ No newline at end of file
Modified: incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderer.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderer.java?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderer.java (original)
+++ incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderer.java Mon Mar 14 09:04:51 2011
@@ -64,7 +64,7 @@ public interface Renderer {
* rendering specification.
*
* @param res RDF resource to be rendered with the template.
- * @param context RDF resource providing a redering context.
+ * @param context RDF resource providing a rendering context.
* @param uriInfo the uriInfo of the request, the renderlet may use
* @param httpHeaders the http-headers of the request
* @param os where the output will be written to.
Modified: incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderlet.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderlet.java?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderlet.java (original)
+++ incubator/clerezza/trunk/parent/platform.typerendering/platform.typerendering.core/src/main/java/org/apache/clerezza/platform/typerendering/Renderlet.java Mon Mar 14 09:04:51 2011
@@ -49,7 +49,7 @@ public interface Renderlet {
private UriInfo uriInfo;
private MultivaluedMap<String, Object> responseHeaders;
private HttpHeaders requestHeaders;
- private final BundleContext bundleContext;
+ public final BundleContext bundleContext; //public only to test an idea
public RequestProperties(UriInfo uriInfo,
HttpHeaders requestHeaders,
@@ -77,7 +77,7 @@ public interface Renderlet {
* Rendering services
*
* @param type
- * @return a intsance of the requested rendering services
+ * @return a instance of the requested rendering services
*/
public <T> T getRenderingService(final Class<T> type) {
return AccessController.doPrivileged(
@@ -107,14 +107,14 @@ public interface Renderlet {
* engine.
*
* @param res RDF resource to be rendered with the template.
- * @param context RDF resource providing a redering context.
+ * @param context RDF resource providing a rendering context.
* @param sharedRenderingValues a map that can be used for sharing values
- * across the different renderlets involved in a rendering process
+ * across the different Renderlets involved in a rendering process
* @param callbackRenderer renderer for call backs.
* @param renderingSpecification the rendering specification
* @param mediaType the media type this media produces (a part of)
* @param mode the mode this Renderlet was invoked with, this is mainly used
- * so that the callbackeRenderer can be claeed inheriting the mode.
+ * so that the callbackRenderer can be claeed inheriting the mode.
* @param requestProperties properties of the http request, may be null
* @param os where the output will be written to.
*/
Modified: incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebDescriptionProvider.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebDescriptionProvider.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebDescriptionProvider.scala (original)
+++ incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebDescriptionProvider.scala Mon Mar 14 09:04:51 2011
@@ -20,15 +20,16 @@
package org.apache.clerezza.platform.users
import org.apache.clerezza.platform.Constants
-import org.apache.clerezza.rdf.core.TripleCollection
-import org.apache.clerezza.rdf.core.UriRef
import org.apache.clerezza.rdf.core.access.NoSuchEntityException
import org.apache.clerezza.rdf.core.access.TcManager
import org.apache.clerezza.rdf.utils.GraphNode
import org.apache.clerezza.rdf.utils.UnionMGraph
import org.osgi.service.component.ComponentContext
+import org.apache.clerezza.rdf.core.{MGraph, TripleCollection, UriRef}
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph
-
+//todo: this class can be generalised to a generalised semweb caching service
+//there's not really a reason to have it specialised for WebIDs.
/**
* delivers the description of a resource. This description is based on local
* data as well as (cached) web-data
@@ -59,7 +60,8 @@ class WebDescriptionProvider {
Constants.CONFIG_GRAPH_URI)
private var authoritativeLocalGraphUnion: TripleCollection = null
-
+
+ /** OSGI method, called on activation */
protected def activate(context: ComponentContext) = {
val baseTripleCollections = for (uri <- authoritativeLocalGraphs) yield {
tcManager.getTriples(uri)
@@ -71,31 +73,61 @@ class WebDescriptionProvider {
authoritativeLocalGraphUnion = null
}
+ //todo: this should probably return Some[GraphNode] as it is possible that there is no URI
+ //todo: or it should return an explanation of what went wrong, for user processing
+ //todo: why do we really need the merge with the system graph? How doangerous is this?
/**
+ * This graph merges remote information and local system information
*
* @param uri the URI to fetch
* @param update true if the local cache is to be updated, false otherwise
- * @return the cached Node as GraphNode with the authoritativeLocalGraphUnion and if available the cache of the remote graph as underlying graph
+ * @return the cached Node as GraphNode with the authoritativeLocalGraphUnion
*/
- def getWebDescription(uri: UriRef, update: Boolean): GraphNode = {
+ def getWebDescription(uri: UriRef, update: Cache.Value): GraphNode = {
+
+ val grph = fetchSemantics(uri, update)
+ val tc = new UnionMGraph(authoritativeLocalGraphUnion, grph, authoritativeLocalGraphUnion)
+ new GraphNode(uri, tc)
- val webIdGraphs = webIdGraphsService.getWebIdGraphs(uri)
- if (webIdGraphs.isLocal) return new GraphNode(uri,webIdGraphs.localGraph)
- if (update) {
- webIdGraphs.updateLocalCache()
+ }
+
+ /**
+ * similar to cwm log:semantics relation. Fetches the graph associated with a URI
+ * this just returns a simple Graph for the representation at the given URI.121
+ *
+ * todo: should this return an MGraph, or a TripleCollection, or something else?
+ *
+ * @param uri the URI to fetch
+ * @param update true if the local cache is to be updated, false otherwise
+ * @return the cached Node as an MGraph
+ *
+ */
+ def fetchSemantics(uri: UriRef, update: Cache.Value): MGraph = {
+ val webIdGraphs = webIdGraphsService.getWebIdGraphs(uri)
+ if (webIdGraphs.isLocal) return webIdGraphs.localGraph
+
+ //the logic here is not quite right, as we don't look at time of previous fetch.
+ update match {
+ case Cache.Fetch => if (webIdGraphs.localCache.size() == 0) webIdGraphs.updateLocalCache()
+ case Cache.ForceUpdate => webIdGraphs.updateLocalCache()
+ case Cache.CacheOnly => {}
}
- val cacheGraphOption: Option[TripleCollection] = try {
- Some(tcManager.getTriples(webIdGraphs.localCacheUri))
+ return try {
+ new SimpleMGraph(tcManager.getTriples(webIdGraphs.localCacheUri))
} catch {
- case e: NoSuchEntityException => None
- }
- val tripleCollection = cacheGraphOption match {
- case Some(g) => new UnionMGraph(authoritativeLocalGraphUnion, g)
- case None => authoritativeLocalGraphUnion
+ case e: NoSuchEntityException => new SimpleMGraph()
}
- new GraphNode(uri, tripleCollection)
-
+
}
}
+
+object Cache extends Enumeration {
+ /** fetch if not in cache, if version in cache is out of date, or return cache */
+ val Fetch = Value
+ /** fetch from source whatever is in cache */
+ val ForceUpdate = Value
+ /** only get cached version. If none exists return empty graph */
+ val CacheOnly = Value
+}
Modified: incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebIdGraphsService.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebIdGraphsService.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebIdGraphsService.scala (original)
+++ incubator/clerezza/trunk/parent/platform.users/core/src/main/scala/org/apache/clerezza/platform/users/WebIdGraphsService.scala Mon Mar 14 09:04:51 2011
@@ -38,6 +38,7 @@ import org.apache.clerezza.rdf.ontologie
import org.apache.clerezza.rdf.utils.UnionMGraph
+//todo: this class can be generalised to a generalised semweb caching service
/**
* For agents with a Web-Id various graphs are available, these graphs are
* grouped by <code>WebIdGraphs</code> which this service provides.
@@ -188,7 +189,14 @@ class WebIdGraphsService() {
case _ => us
}
}
-
+
+ //todo: follow redirects and keep track of them
+ //todo: keep track of headers especially date and etag. test for etag similarity
+ //todo: it may be important to have blank node identifiers for graphs as the same webid, when called by different
+ // agents could have very different content
+ //todo: for https connection allow user to specify his webid and send his key: ie allow web server to be an agent
+ //todo: add GRDDL functionality, so that other return types can be processed too
+ //todo: enable ftp and other formats (though content negotiation won't work there)
def updateLocalCache() = {
val url = new URL(representationGraphUriString)
val connection = url.openConnection()
Modified: incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala (original)
+++ incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/CollectedIter.scala Mon Mar 14 09:04:51 2011
@@ -38,6 +38,7 @@ import java.util.concurrent.locks.Lock
class CollectedIter[T](iterCreator: () => Iterator[T], readLock: Lock) extends immutable.Seq[T] {
def this(jList : java.util.List[T], readLock: Lock) = this(() => jList.iterator(), readLock)
+ def this() = this( ()=> java.util.Collections.emptyList[T].iterator(),null)
var iter = iterCreator()
var firstIter = true
Modified: incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala?rev=1081290&r1=1081289&r2=1081290&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala (original)
+++ incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/RichGraphNode.scala Mon Mar 14 09:04:51 2011
@@ -26,6 +26,14 @@ import _root_.scala.collection.JavaConve
import _root_.scala.reflect.Manifest
class RichGraphNode(node: GraphNode) extends GraphNode(node.getNode, node.getGraph) {
+
+ /* because it is tedious to wrap nodes as happens in a lot of code.
+ *
+ * todo: does one really need to create the graph node? Is there a reason this is passed ike that,
+ * todo: or was that just a quick hack? If it is because we don't want to use any of the superclass implementations
+ * todo: then it would be worth creating an interface above GraphNode and implementing the interface instead...
+ */
+ def this(node: Resource, graph: GraphNode ) = this(new GraphNode(node,graph))
/**
* Operator syntax shortcut to get all objects as <code>RichGraphNode</code>s
*/
@@ -56,17 +64,14 @@ class RichGraphNode(node: GraphNode) ext
/**
* returns the lexical form of literals, the unicode-string for UriRef for
* BNodes the value returned by toString
+ * todo: not sure this is a good symbol as it is usually a binary symbol, and so if it is found at the end of a line the
+ * todo: the parsers expect the expression to go on the next line
*/
- def * = {
- val wrappedNode = node.getNode();
- if (wrappedNode.isInstanceOf[Literal]) {
- wrappedNode.asInstanceOf[Literal].getLexicalForm
- } else {
- if (wrappedNode.isInstanceOf[UriRef]) {
- wrappedNode.asInstanceOf[UriRef].getUnicodeString
- } else {
- wrappedNode.toString
- }
+ def * : String = {
+ node.getNode() match {
+ case lit: Literal => lit.getLexicalForm
+ case uri: UriRef => uri.getUnicodeString
+ case wrappedNode => wrappedNode.toString
}
}