Author: mir
Date: Tue Jun 29 16:46:09 2010
New Revision: 959024

URL: http://svn.apache.org/viewvc?rev=959024&view=rev
Log:
CLEREZZA-250: implemented a way to describe permissions and a service that 
finds and provides these descriptions

Added:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/pom.xml
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescriptionsProvider.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescripton.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionGatherer.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionInfo.java
Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/pom.xml?rev=959024&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/pom.xml
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/pom.xml
 Tue Jun 29 16:46:09 2010
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><project 
xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.apache.clerezza</groupId>
+               <artifactId>org.apache.clerezza.parent</artifactId>
+               <version>0.2-incubating-SNAPSHOT</version>
+       </parent>
+       <groupId>org.apache.clerezza</groupId>
+       <artifactId>org.apache.clerezza.permissiondescriptions</artifactId>
+       <packaging>bundle</packaging>
+       <version>0.1-incubating-SNAPSHOT</version>
+       <name>Clerezza - Permission Descriptions</name>
+       <description>A bundle providing class and interface for providing 
permission descriptions.</description>
+       <dependencies>
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.core</artifactId>
+        </dependency>
+               <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.compendium</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.felix</groupId>
+                       
<artifactId>org.apache.felix.scr.annotations</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.clerezza</groupId>
+                       <artifactId>org.apache.clerezza.utils</artifactId>
+               </dependency>
+       </dependencies>
+</project>

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescriptionsProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescriptionsProvider.java?rev=959024&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescriptionsProvider.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescriptionsProvider.java
 Tue Jun 29 16:46:09 2010
@@ -0,0 +1,39 @@
+/*
+ * 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.permissiondescriptions;
+
+import java.util.Set;
+
+/**
+ * A class implementing this interface, provides information about permissions
+ * needed by the class itself, the package or bundle that it is part of.
+ *
+ * @author mir
+ */
+public interface PermissionDescriptionsProvider {
+
+
+       /**
+        * Returns a set of <code>PermissionDescriptor</code>s.
+        *
+        * @return
+        */
+       public Set<PermissionDescripton> getPermissionDescriptors();
+}

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescripton.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescripton.java?rev=959024&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescripton.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionDescripton.java
 Tue Jun 29 16:46:09 2010
@@ -0,0 +1,84 @@
+/*
+ * 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.permissiondescriptions;
+
+import java.net.URL;
+import java.security.Permission;
+
+/**
+ * The implementation of <code>PermissionDescription</code> used by the
+ * <code>PersmissionDescriptionsProvider</code>
+ *
+ * @author mir
+ */
+public class PermissionDescripton {
+
+       private String name, description, javaPermissionString;
+       private URL iconUri;
+
+       public PermissionDescripton(String name, String description, URL 
iconUri,
+                       Class<? extends Permission> permissionClassName, String 
javaPermissionString) {
+               this.name = name;
+               this.description = description;
+               this.javaPermissionString = javaPermissionString;
+               this.iconUri = iconUri;
+       }
+
+       /**
+        * Returns a description about the permission.
+        *
+        * @return
+        */
+       public String getDescription() {
+               return description;
+       }
+
+       /**
+        * Returns an icon URI that describes pictorgraphically what the 
permission
+        * in its current configuration does. E.g. the icon of a file read 
permission
+        * may depict an eye, while the icon for a file write permission might 
be a pencil.
+        *
+        * @return
+        */
+       public URL getIcon () {
+               return iconUri;
+       }
+
+       /**
+        * The name of the permission in a human comprehensible form.
+        *
+        * @return
+        */
+       public String getSimpleName() {
+               return name;
+       }
+
+       /**
+        * Returns a string describing this Permission. It has to be formated 
according
+        * the java.security.Permission toString()-convention. The convention 
is to specify
+        * the class name, the permission name, and the actions in the 
following format:
+        * '("ClassName" "name" "actions")'.
+        * @return
+        */
+       public String getJavaPermissionString() {
+               return javaPermissionString ;
+       }
+       
+}

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionGatherer.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionGatherer.java?rev=959024&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionGatherer.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionGatherer.java
 Tue Jun 29 16:46:09 2010
@@ -0,0 +1,238 @@
+/*
+ * 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.permissiondescriptions;
+
+import java.net.URL;
+import java.security.Permission;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import org.apache.clerezza.utils.IteratorMerger;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.Service;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This binds all implementations of 
<code>PermissionDescriptionsProvider</code>,
+ * and gathers their <code>PermissionDescription</code>s. Furthermore the 
gatherer
+ * scans all activaded bundles for <code>Permission</code>s which are 
annonated with the 
+ * <code>PermissionInfo</code> annotation and generates 
<code>PermissionDescription</code>s
+ * for them. This service provides methods to retrieve the gathered
+ * <code>PermissionDescription</code>s and also methods to retrieve all 
unannotated
+ * <code>Permission</code> found in the activated bundles. If new bundles are
+ * started then they are also scanned.
+ *
+ * @author mir
+ */
+...@component()
+...@service(PermissionGatherer.class)
+...@reference(name="permissionProvider", policy=ReferencePolicy.DYNAMIC,
+       referenceInterface=PermissionDescriptionsProvider.class, 
cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE)
+public class PermissionGatherer implements BundleListener {
+
+       private final Logger logger = LoggerFactory.getLogger(getClass());
+
+       private Map<Bundle, Collection<Class<? extends Permission>>> 
bundle2PermissionClassesMap =
+                       Collections.synchronizedMap(new HashMap<Bundle, 
Collection<Class<? extends Permission>>>());
+       private Map<Bundle, Collection<PermissionDescripton>> 
bundle2PermissionDescriptorsMap =
+                       Collections.synchronizedMap(new HashMap<Bundle, 
Collection<PermissionDescripton>>());
+       
+       private ComponentContext componentContext;
+       
+       /**
+        * stores all <code>ServiceReference</code>s of 
<code>PermissionDescriptionsProvider</code>s
+        * that were bound before the PermissionGatherer was activated.
+        */
+       private Set<ServiceReference> serviceReferenceStore = new 
HashSet<ServiceReference>();
+
+
+       public Map<Bundle, Collection<PermissionDescripton>> 
getPermissionDescriptorsPerBundles() {
+               return 
Collections.unmodifiableMap(bundle2PermissionDescriptorsMap);
+       }
+
+       public Iterator<PermissionDescripton> getAllPermissionDescriptors() {
+               return new 
IteratorMerger<PermissionDescripton>(bundle2PermissionDescriptorsMap.values());
+       }
+
+       public Map<Bundle, Collection<Class<? extends Permission>>> 
getPermissionsPerBundles() {
+               return Collections.unmodifiableMap(bundle2PermissionClassesMap);
+       }
+
+       public Iterator<Class<? extends Permission>> getAllPermissions() {
+               return new IteratorMerger<Class<? extends Permission>>(
+                               bundle2PermissionClassesMap.values());
+       }
+
+       protected void activate(final ComponentContext componentContext) {
+               this.componentContext = componentContext;
+               registerFromServiceReferenceStore();
+               componentContext.getBundleContext().addBundleListener(this);
+               logger.debug("Start registering permissions from activated 
bundles");
+               registerPermissionsFromActivatedBundles(componentContext);
+               logger.debug("Registered permissions from activated bundles");
+       }
+
+       synchronized private void registerFromServiceReferenceStore() {
+               if (componentContext != null) {
+
+                       for (ServiceReference ref : serviceReferenceStore) {
+                               this.registerPermissionDescriptorsProvider(ref);
+                       }
+                       serviceReferenceStore.clear();
+               }
+       }
+
+       synchronized protected void bindPermissionProvider(ServiceReference 
serviceReference) {
+               if (componentContext != null) {
+                       registerPermissionDescriptorsProvider(serviceReference);
+               } else {
+                       serviceReferenceStore.add(serviceReference);
+               }
+
+       }
+
+       synchronized protected void unbindPermissionProvider(ServiceReference 
serviceReference) {
+
+               if (!serviceReferenceStore.remove(serviceReference)) {
+                       PermissionDescriptionsProvider permissionProvider = 
(PermissionDescriptionsProvider)
+                               
componentContext.locateService("permissionProvider", serviceReference);
+                       Bundle bundle = serviceReference.getBundle();
+
+                       Collection<PermissionDescripton> permissionDescriptiors 
=
+                               bundle2PermissionDescriptorsMap.get(bundle);
+
+                       
permissionDescriptiors.removeAll(permissionProvider.getPermissionDescriptors());
+                       if (permissionDescriptiors.isEmpty()) {
+                               bundle2PermissionDescriptorsMap.remove(bundle);
+                       }
+               }
+
+       }
+
+       private void registerPermissionDescriptorsProvider(ServiceReference 
serviceReference) {
+               PermissionDescriptionsProvider permissionProvider = 
(PermissionDescriptionsProvider)
+                               
componentContext.locateService("permissionProvider", serviceReference);
+               if (permissionProvider == null) {
+                       return;
+               }
+               Collection<PermissionDescripton> permissionDescriptiors =
+                               
bundle2PermissionDescriptorsMap.get(serviceReference.getBundle());
+               if (permissionDescriptiors == null) {
+                       permissionDescriptiors = new 
HashSet<PermissionDescripton>();
+               }
+               
permissionDescriptiors.addAll(permissionProvider.getPermissionDescriptors());
+
+       }
+
+       protected void deactivate(final ComponentContext componentContext) {
+               componentContext.getBundleContext().removeBundleListener(this);
+       }
+
+       @Override
+       public void bundleChanged(BundleEvent event) {
+               Bundle bundle = event.getBundle();
+               switch (event.getType()) {
+                       case BundleEvent.STARTED:
+                               registerPermissions(bundle);
+                               break;
+                       case BundleEvent.STOPPED:
+                               unregisterPermissions(bundle);
+                               break;
+               }
+       }
+
+       private void registerPermissionsFromActivatedBundles(ComponentContext 
componentContext) {
+               Bundle[] bundles = 
componentContext.getBundleContext().getBundles();
+               for (Bundle bundle : bundles) {
+                       if (bundle.getState() == Bundle.ACTIVE) {
+                               registerPermissions(bundle);
+                       }
+               }
+       }
+
+       private void registerPermissions(Bundle bundle) {
+               Enumeration<URL> classUrls = bundle.findEntries("/", "*.class", 
true);
+               if (classUrls == null) {
+                       return;
+               }
+               Set<Class<? extends Permission>> permissionClassesSet = new 
HashSet<Class<? extends Permission>>();
+               Set<PermissionDescripton> newPermissionDescriptors =
+                               new HashSet<PermissionDescripton>();
+               while (classUrls.hasMoreElements()) {
+                       URL url = classUrls.nextElement();                      
+                       try {
+                               String className = url.getPath();
+                               int indexOfLastDot = className.lastIndexOf(".");
+                               className = className.replaceAll("/", 
".").substring(1, indexOfLastDot);
+                               Class<?> clazz = bundle.loadClass(className);
+                               if (Permission.class.isAssignableFrom(clazz)) {
+                                       PermissionInfo permissionInfo = 
clazz.getAnnotation(PermissionInfo.class);
+                                       if (permissionInfo != null) {
+                                               
newPermissionDescriptors.add(new PermissionDescripton(permissionInfo.value(),
+                                                               
permissionInfo.description(), clazz.getResource(permissionInfo.icon()),
+                                                               (Class<? 
extends Permission>) clazz,
+                                                               
getJavaPermissionString(clazz)));
+                                       } else {
+                                               
permissionClassesSet.add((Class<? extends Permission>) clazz);
+                                       }
+                               }
+                       } catch (Exception ex) {
+                       } catch (NoClassDefFoundError err) {}
+                       
+               }
+               if (!permissionClassesSet.isEmpty()) {
+                       bundle2PermissionClassesMap.put(bundle, 
permissionClassesSet);
+               }
+               if (!newPermissionDescriptors.isEmpty()) {
+
+                       Collection<PermissionDescripton> permissionDescriptiors 
=
+                                       
bundle2PermissionDescriptorsMap.get(bundle);
+                       if (permissionDescriptiors == null) {
+                               permissionDescriptiors = 
newPermissionDescriptors;
+                       } else {
+                               
permissionDescriptiors.addAll(newPermissionDescriptors);
+                       }
+                       bundle2PermissionDescriptorsMap.put(bundle, 
permissionDescriptiors);
+               }
+       }
+
+       private void unregisterPermissions(Bundle bundle) {
+               bundle2PermissionClassesMap.remove(bundle);
+               bundle2PermissionDescriptorsMap.remove(bundle);
+       }
+
+       private String getJavaPermissionString(Class clazz) {
+               return "(" + clazz.getName() + " \"\" \"\")";
+       }
+}

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionInfo.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionInfo.java?rev=959024&view=auto
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionInfo.java
 (added)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.permissiondescriptions/src/main/java/org/apache/clerezza/permissiondescriptions/PermissionInfo.java
 Tue Jun 29 16:46:09 2010
@@ -0,0 +1,53 @@
+/*
+ * 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.permissiondescriptions;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation is used to annotate {...@link Permission}s to provide 
additional
+ * information about the permission
+ *
+ * @author mir
+ */
+...@target({ElementType.TYPE})
+...@retention(RetentionPolicy.RUNTIME)
+public @interface PermissionInfo {
+       
+       /**
+        * The name of the permission in a human comprehensible form.
+        */
+       String value();
+       
+       /**
+        * A description about the permission.
+        */
+       String description() default "";
+
+       /**
+        * A relative path to the icon resource that describes 
pictorgraphically what 
+        * the permission does. E.g. the icon of a file read permission may 
depict an eye,
+        * while the icon for a file write permission might be a pencil.
+        */
+       String icon() default "";
+
+}

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml?rev=959024&r1=959023&r2=959024&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml Tue Jun 29 
16:46:09 2010
@@ -37,6 +37,7 @@
                <module>org.apache.clerezza.maven-jaxrs-report-plugin</module>
                <module>org.apache.clerezza.maven-ontologies-plugin</module>
                <module>org.apache.clerezza.maven-pladoc-plugin</module>
+               <module>org.apache.clerezza.permissiondescriptions</module>
                <module>org.apache.clerezza.platform</module>
                
<module>org.apache.clerezza.platform.accountcontrolpanel</module>
                <module>org.apache.clerezza.platform.concepts</module>
@@ -1057,6 +1058,11 @@
                                
<artifactId>org.apache.clerezza.uima</artifactId>
                                <version>0.1-incubating-SNAPSHOT</version>
                        </dependency>
+                       <dependency>
+                               <groupId>org.apache.clerezza</groupId>
+                               
<artifactId>org.apache.clerezza.permissiondescriptions</artifactId>
+                               <version>0.1-incubating-SNAPSHOT</version>
+                       </dependency>
                </dependencies>
        </dependencyManagement>
        <distributionManagement>


Reply via email to