<groupId>org.eclipse.core</groupId>
<artifactId>org.eclipse.core.runtime</artifactId>
</dependency>
- <dependency>
- <groupId>org.eclipse.swt</groupId>
- <artifactId>org.eclipse.swt</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.swt</groupId>
- <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.swt</groupId>
- <artifactId>org.eclipse.swt.gtk.linux.x86</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.swt</groupId>
- <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
- </dependency>
<dependency>
<groupId>org.eclipse.core</groupId>
<artifactId>org.eclipse.core.commands</artifactId>
<groupId>org.eclipse.equinox</groupId>
<artifactId>org.eclipse.equinox.launcher</artifactId>
</dependency>
+
+ <!-- Security -->
<dependency>
<groupId>org.eclipse.equinox</groupId>
- <artifactId>org.eclipse.equinox.launcher.gtk.linux.x86_64</artifactId>
- </dependency>
- <dependency>
- <groupId>org.eclipse.equinox</groupId>
- <artifactId>org.eclipse.equinox.launcher.gtk.linux.x86</artifactId>
+ <artifactId>org.eclipse.equinox.security</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.equinox</groupId>
- <artifactId>org.eclipse.equinox.launcher.win32.win32.x86</artifactId>
+ <artifactId>org.eclipse.equinox.security.ui</artifactId>
</dependency>
</dependencies>
</project>
<groupId>org.eclipse.ui</groupId>
<artifactId>org.eclipse.ui</artifactId>
</dependency>
+
+ <!-- SWT -->
+ <dependency>
+ <groupId>org.eclipse.swt</groupId>
+ <artifactId>org.eclipse.swt</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.swt</groupId>
+ <artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.swt</groupId>
+ <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
+ </dependency>
+
+
+ <!-- <dependency> -->
+ <!-- <groupId>org.eclipse.equinox</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.x86_64</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.eclipse.equinox</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.gtk.linux.x86</artifactId> -->
+ <!-- </dependency> -->
+ <!-- <dependency> -->
+ <!-- <groupId>org.eclipse.equinox</groupId> -->
+ <!-- <artifactId>org.eclipse.equinox.launcher.win32.win32.x86</artifactId> -->
+ <!-- </dependency> -->
</dependencies>
</project>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${version.maven-bundle-plugin}</version>
- <configuration>
- <manifestLocation>META-INF</manifestLocation>
- <instructions>
- <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
- <Bundle-Version>${project.version}-r${buildNumber}</Bundle-Version>
- </instructions>
- </configuration>
- <executions>
- <execution>
- <id>bundle-manifest</id>
- <phase>process-resources</phase>
- <goals>
- <goal>manifest</goal>
- </goals>
- </execution>
- </executions>
</plugin>
-
</plugins>
<pluginManagement>
<plugins>
<groupId>org.argeo.maven.plugins</groupId>
<artifactId>maven-argeo-osgi-plugin</artifactId>
<executions>
+ <execution>
+ <id>resolve-pde-sources</id>
+ <goals>
+ <goal>pde-sources</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
<execution>
<id>generate-descriptors</id>
<goals>
</goals>
<phase>generate-resources</phase>
</execution>
- <!-- <execution> <id>check-osgi</id> <phase>test</phase> <goals> <goal>equinox</goal>
- </goals> <configuration> <onlyCheck>true</onlyCheck> <argsToAppend> <arg>-clean</arg>
- </argsToAppend> </configuration> </execution> -->
+ <execution>
+ <id>check-osgi</id>
+ <phase>test</phase>
+ <goals>
+ <goal>equinox</goal>
+ </goals>
+ <configuration>
+ <onlyCheck>true</onlyCheck>
+ <argsToAppend>
+ <arg>-clean</arg>
+ </argsToAppend>
+ </configuration>
+ </execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons.osgi</groupId>
+ <artifactId>org.argeo.osgi.boot</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
</project>
\ No newline at end of file
<groupId>org.springframework</groupId>
<artifactId>org.springframework.context</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.springframework.osgi</groupId>
+ <artifactId>org.springframework.osgi.extender</artifactId>
+ </dependency>
<!-- Others -->
<dependency>
+++ /dev/null
-/*
- * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
- *
- * Licensed 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.argeo.eclipse.spring;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-import org.springframework.context.ApplicationContext;
-
-public abstract class AbstractSpringUiPlugin extends AbstractUIPlugin {
- private BundleContext bundleContext;
-
- @Override
- public void start(BundleContext context) throws Exception {
- super.start(context);
- this.bundleContext = context;
- }
-
- @Override
- public void stop(BundleContext context) throws Exception {
- super.stop(context);
- }
-
- public ApplicationContext getApplicationContext() {
- return ApplicationContextTracker.getApplicationContext(bundleContext
- .getBundle());
- }
-}
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
-import org.argeo.eclipse.ui.ArgeoUiPlugin;\r
import org.eclipse.core.runtime.Platform;\r
import org.osgi.framework.Bundle;\r
import org.osgi.framework.BundleContext;\r
*/\r
public ApplicationContextTracker(final Bundle contributorBundle,\r
final BundleContext factoryBundleContext) {\r
- final String filter = format(FILTER, contributorBundle\r
- .getSymbolicName());\r
+ final String filter = format(FILTER,\r
+ contributorBundle.getSymbolicName());\r
try {\r
applicationContextServiceTracker = new ServiceTracker(\r
factoryBundleContext, FrameworkUtil.createFilter(filter),\r
\r
static ApplicationContext getApplicationContext(Bundle contributorBundle) {\r
if (log.isTraceEnabled())\r
- log\r
- .trace("Get application context for bundle "\r
- + contributorBundle);\r
+ log.trace("Get application context for bundle " + contributorBundle);\r
\r
if (contributorBundle.getState() != Bundle.ACTIVE\r
&& contributorBundle.getState() != Bundle.STARTING) {\r
}\r
\r
final ApplicationContextTracker applicationContextTracker = new ApplicationContextTracker(\r
- contributorBundle, ArgeoUiPlugin.getDefault()\r
- .getBundleContext());\r
+ contributorBundle, contributorBundle.getBundleContext());\r
ApplicationContext applicationContext = null;\r
try {\r
applicationContext = applicationContextTracker\r
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.argeo.commons.osgi</groupId>
<configuration>
<instructions>
<Bundle-Activator>org.argeo.osgi.boot.Activator</Bundle-Activator>
+ <Bundle-RequiredExecutionEnvironment>J2SE-1.4</Bundle-RequiredExecutionEnvironment>
</instructions>
</configuration>
</plugin>
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.argeo</groupId>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
+ <version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
+ <version>2.3.1</version>
<configuration>
<archive>
<manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile>
<instructions>
<Bundle-Version>${project.version}-r${buildNumber}</Bundle-Version>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+ <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
<_removeheaders>Bnd-LastModified</_removeheaders>
</instructions>
</configuration>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
+ <version>2.4.3</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
+ <version>2.3.1</version>
<reportSets>
<reportSet>
<reports>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
+ <version>2.7</version>
<inherited>false</inherited>
<configuration>
<aggregate>true</aggregate>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jxr-plugin</artifactId>
+ <version>2.2</version>
<configuration>
<aggregate>true</aggregate>
</configuration>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.7.1</version>
<inherited>false</inherited>
<configuration>
<aggregate>true</aggregate>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>taglist-maven-plugin</artifactId>
+ <version>2.4</version>
<configuration>
<aggregate>true</aggregate>
<tags>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-changelog-plugin</artifactId>
+ <version>2.2</version>
<inherited>false</inherited>
</plugin>
<plugin>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.security.equinox</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+#Sun Jan 16 11:20:02 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
--- /dev/null
+#Sun Jan 16 11:19:07 CET 2011
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="springLoginModule" class="org.argeo.security.equinox.SpringLoginModule"
+ scope="prototype">
+ <property name="authenticationManager" ref="authenticationManager" />
+ </bean>
+</beans>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
+ xmlns:osgi="http://www.springframework.org/schema/osgi"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
+ http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
+ http://www.springframework.org/schema/beans \r
+ http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"\r
+ osgi:default-timeout="30000">\r
+\r
+ <reference id="authenticationManager"\r
+ interface="org.springframework.security.AuthenticationManager"\r
+ context-class-loader="client" />\r
+</beans:beans>
\ No newline at end of file
--- /dev/null
+bin.includes = META-INF/,\
+ jaas/,\
+ plugin.xml
+source.. = src/main/java/
+output.. = target/classes/
--- /dev/null
+UNIX {
+ org.eclipse.equinox.security.auth.module.ExtensionLoginModule sufficient
+ extensionId="org.argeo.security.equinox.unixLoginModule";
+};
+
+SPRING {
+ org.eclipse.equinox.security.auth.module.ExtensionLoginModule sufficient
+ extensionId="org.argeo.security.equinox.springLoginModule";
+};
+
+SPRING_SECURITY_CONTEXT {
+ org.eclipse.equinox.security.auth.module.ExtensionLoginModule sufficient
+ extensionId="org.argeo.security.equinox.springSecurityContextLoginModule";
+};
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ id="springSecurityContextLoginModule"
+ point="org.eclipse.equinox.security.loginModule">
+ <loginModule
+ class="org.springframework.security.providers.jaas.SecurityContextLoginModule"
+ description="Spring Security Context (provided by Spring)">
+ </loginModule>
+ </extension>
+ <extension id="unixLoginModule"
+ name="Unix Login Module"
+ point="org.eclipse.equinox.security.loginModule">
+ <loginModule
+ class="com.sun.security.auth.module.UnixLoginModule"
+ description="Unix Login Module">
+ </loginModule>
+ </extension>
+ <extension
+ id="springLoginModule"
+ point="org.eclipse.equinox.security.loginModule">
+ name="Spring Login Module"
+ <loginModule
+ class="org.argeo.eclipse.spring.SpringExtensionFactory"
+ description="Spring Login Module">
+ </loginModule>
+ </extension>
+
+</plugin>
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.security</groupId>
+ <version>0.2.2-SNAPSHOT</version>
+ <artifactId>plugins</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.security.equinox</artifactId>
+ <name>Commons Security Equinox</name>
+ <packaging>jar</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>${version.maven-bundle-plugin}</version>
+ <configuration>
+ <instructions>
+ <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
+ <Bundle-Activator>org.argeo.security.equinox.EquinoxSecurity</Bundle-Activator>
+ <Import-Package>*,
+ org.springframework.core,
+ org.argeo.eclipse.spring
+ </Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+
+ <!-- Eclipse -->
+ <dependency>
+ <groupId>org.eclipse.osgi</groupId>
+ <artifactId>org.eclipse.osgi</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.equinox</groupId>
+ <artifactId>org.eclipse.equinox.security</artifactId>
+ </dependency>
+
+ <!-- Commons -->
+ <dependency>
+ <groupId>org.argeo.commons.basic</groupId>
+ <artifactId>org.argeo.basic.nodeps</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Spring -->
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>org.springframework.security.core</artifactId>
+ </dependency>
+
+ <!-- Others -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
+ </dependency>
+
+ </dependencies>
+</project>
--- /dev/null
+package org.argeo.security.equinox;
+
+import java.security.Principal;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.security.auth.Subject;
+
+import org.eclipse.equinox.security.auth.ILoginContext;
+import org.eclipse.equinox.security.auth.LoginContextFactory;
+import org.springframework.security.Authentication;
+import org.springframework.security.GrantedAuthority;
+
+public class CurrentUser {
+ public final static String getUsername() {
+ Subject subject = getSubject();
+ if (subject == null)
+ return null;
+ Principal principal = subject.getPrincipals().iterator().next();
+ return principal.getName();
+
+ }
+
+ public final static Set<String> roles() {
+ Principal principal = getSubject().getPrincipals().iterator().next();
+ Authentication authentication = (Authentication) principal;
+ Set<String> roles = Collections.synchronizedSet(new HashSet<String>());
+ for (GrantedAuthority ga : authentication.getAuthorities()) {
+ roles.add(ga.getAuthority());
+ }
+ return Collections.unmodifiableSet(roles);
+ }
+
+ private final static ILoginContext getLoginContext() {
+ return EquinoxSecurity.getLoginContext();
+// return LoginContextFactory
+// .createContext(EquinoxSecurity.CONTEXT_SPRING);
+ }
+
+ // private static void login() {
+ // try {
+ // getLoginContext().login();
+ // } catch (LoginException e) {
+ // throw new RuntimeException("Cannot login", e);
+ // }
+ // }
+
+ public final static Subject getSubject() {
+
+ Subject subject = null;
+ // subject = Subject.getSubject(AccessController.getContext());
+ try {
+ getLoginContext().login();
+ subject = getLoginContext().getSubject();
+ } catch (Exception e) {
+ throw new RuntimeException("Cannot retrieve subject", e);
+ }
+
+ return subject;
+
+ }
+
+}
--- /dev/null
+package org.argeo.security.equinox;
+
+import java.net.URL;
+
+import org.eclipse.equinox.security.auth.ILoginContext;
+import org.eclipse.equinox.security.auth.LoginContextFactory;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class EquinoxSecurity implements BundleActivator {
+ public final static String CONTEXT_SPRING = "SPRING";
+ private static final String JAAS_CONFIG_FILE = "jaas/jaas_default.txt";
+
+ private static BundleContext bundleContext;
+
+ public void start(BundleContext context) throws Exception {
+ bundleContext = context;
+ // URL url = new URL(
+ // "file:////home/mbaudier/dev/src/commons/security/eclipse/plugins/org.argeo.security.ui.rcp/jaas_config.txt");
+ // // URL url = new URL(
+ // //
+ // "file:////home/mbaudier/dev/src/commons/security/eclipse/plugins/org.argeo.security.ui.rcp/jaas_config.txt");
+ // ILoginContext secureContext = LoginContextFactory.createContext(
+ // configName, url);
+ getLoginContext();
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ bundleContext = null;
+ }
+
+ static ILoginContext getLoginContext() {
+ String configName = CONTEXT_SPRING;
+ URL configUrl = bundleContext.getBundle().getEntry(JAAS_CONFIG_FILE);
+ return LoginContextFactory.createContext(configName, configUrl);
+ }
+
+}
--- /dev/null
+package org.argeo.security.equinox;
+
+import java.util.Map;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.TextOutputCallback;
+import javax.security.auth.login.LoginException;
+
+import org.springframework.security.Authentication;
+import org.springframework.security.AuthenticationException;
+import org.springframework.security.AuthenticationManager;
+import org.springframework.security.BadCredentialsException;
+import org.springframework.security.context.SecurityContextHolder;
+import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
+import org.springframework.security.providers.jaas.SecurityContextLoginModule;
+
+public class SpringLoginModule extends SecurityContextLoginModule {
+ private AuthenticationManager authenticationManager;
+ private Subject subject;
+
+ private CallbackHandler callbackHandler;
+
+ public SpringLoginModule() {
+
+ }
+
+ @SuppressWarnings("rawtypes")
+ public void initialize(Subject subject, CallbackHandler callbackHandler,
+ Map sharedState, Map options) {
+ super.initialize(subject, callbackHandler, sharedState, options);
+ this.subject = subject;
+ this.callbackHandler = callbackHandler;
+ }
+
+ public boolean login() throws LoginException {
+ // thread already logged in
+ if (SecurityContextHolder.getContext().getAuthentication() != null)
+ return super.login();
+
+ if (subject.getPrincipals(Authentication.class).size() == 1) {
+ registerAuthentication(subject.getPrincipals(Authentication.class)
+ .iterator().next());
+ return super.login();
+ } else if (subject.getPrincipals(Authentication.class).size() > 1) {
+ throw new LoginException(
+ "Multiple Authentication principals not supported: "
+ + subject.getPrincipals(Authentication.class));
+ } else {
+ // ask for username and password
+ Callback label = new TextOutputCallback(
+ TextOutputCallback.INFORMATION, "Required login");
+ NameCallback nameCallback = new NameCallback("User");
+ PasswordCallback passwordCallback = new PasswordCallback(
+ "Password", false);
+
+ if (callbackHandler == null) {
+ // throw new LoginException("No call back handler available");
+ return false;
+ }
+ try {
+ callbackHandler.handle(new Callback[] { label, nameCallback,
+ passwordCallback });
+ } catch (Exception e) {
+ LoginException le = new LoginException(
+ "Callback handling failed");
+ le.initCause(e);
+ throw le;
+ }
+
+ // Set user name and password
+ String username = nameCallback.getName();
+ String password = "";
+ if (passwordCallback.getPassword() != null) {
+ password = String.valueOf(passwordCallback.getPassword());
+ }
+ UsernamePasswordAuthenticationToken credentials = new UsernamePasswordAuthenticationToken(
+ username, password);
+
+ try {
+ Authentication authentication = authenticationManager
+ .authenticate(credentials);
+ registerAuthentication(authentication);
+ return super.login();
+ } catch (Exception e) {
+ LoginException loginException = new LoginException(
+ "Bad credentials");
+ loginException.initCause(e);
+ throw loginException;
+ }
+ }
+ }
+
+ /**
+ * Register an {@link Authentication} in the security context.
+ *
+ * @param authentication
+ * has to implement {@link Authentication}.
+ */
+ protected void registerAuthentication(Object authentication) {
+ SecurityContextHolder.getContext().setAuthentication(
+ (Authentication) authentication);
+ }
+
+ public void setAuthenticationManager(
+ AuthenticationManager authenticationManager) {
+ this.authenticationManager = authenticationManager;
+ }
+
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde version="3.6"?>
+<target name="org.argeo.security.ui.rap - Local Maven repository (v0.2.2-SNAPSHOT)">
+<locations>
+<location path="${system_property:user.home}/.m2/repository/com/ibm/icu/com.ibm.icu/4.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/com/ibm/icu/com.ibm.icu.source/4.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/com/springsource/json/com.springsource.json/1.0.1.RELEASE" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/com/springsource/json/com.springsource.json.source/1.0.1.RELEASE" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/edu/emory/mathcs/backport/com.springsource.edu.emory.mathcs.backport/2.2.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/edu/emory/mathcs/backport/com.springsource.edu.emory.mathcs.backport.source/2.2.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/javax/servlet/com.springsource.javax.servlet/2.5.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/javax/servlet/com.springsource.javax.servlet.source/2.5.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/javax/xml/stream/com.springsource.javax.xml.stream/1.0.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/javax/xml/stream/com.springsource.javax.xml.stream.source/1.0.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/net/sourceforge/jdbm/com.springsource.jdbm/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/net/sourceforge/jdbm/com.springsource.jdbm.source/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/antlr/com.springsource.antlr/2.7.6" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/antlr/com.springsource.antlr.source/2.7.6" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/antlr/com.springsource.org.antlr/3.0.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/antlr/com.springsource.org.antlr.source/3.0.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/aopalliance/com.springsource.org.aopalliance/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/aopalliance/com.springsource.org.aopalliance.source/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.codec/1.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.codec.source/1.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.collections/3.2.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.collections.source/3.2.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.io/1.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.io.source/1.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.lang/2.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.lang.source/2.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.logging/1.1.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.logging.source/1.1.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.pool/1.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/commons/com.springsource.org.apache.commons.pool.source/1.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.changepw/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.changepw.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.core/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.core.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.core.shared/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.core.shared.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.jndi/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.jndi.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.kerberos/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.kerberos.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.kerberos.shared/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.kerberos.shared.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.ldap/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.ldap.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.ntp/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.ntp.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.protocol.shared/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.server.protocol.shared.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.shared.asn1/0.9.5.5" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.shared.asn1.source/0.9.5.5" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.shared.ldap/0.9.5.5" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/directory/com.springsource.org.apache.directory.shared.ldap.source/0.9.5.5" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/log4j/com.springsource.org.apache.log4j/1.2.15" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/log4j/com.springsource.org.apache.log4j.source/1.2.15" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/mina/com.springsource.org.apache.mina/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/mina/com.springsource.org.apache.mina.source/1.0.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/ws/com.springsource.org.apache.ws.commons.schema/1.3.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/apache/ws/com.springsource.org.apache.ws.commons.schema.source/1.3.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/basic/org.argeo.basic.nodeps/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/basic/org.argeo.basic.nodeps.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/eclipse/org.argeo.eclipse.dep.common/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/eclipse/org.argeo.eclipse.dep.rap/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/eclipse/org.argeo.eclipse.ui/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/eclipse/org.argeo.eclipse.ui.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/osgi/org.argeo.osgi.boot/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/osgi/org.argeo.osgi.boot.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.core/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.core.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.equinox/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.equinox.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.manager.ldap/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.services/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.ui/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/security/org.argeo.security.ui.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.ads/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.ads.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.ads.server/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.core/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.core.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.json/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/commons/server/org.argeo.server.json.source/0.2.2-SNAPSHOT" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/dep/osgi/org.argeo.dep.osgi.directory.shared.asn.codec/0.9.5.5.0001" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/dep/osgi/org.argeo.dep.osgi.directory.shared.asn.codec.source/0.9.5.5.0001" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/dep/osgi/org.argeo.dep.osgi.mina.filter.ssl/1.0.2.0001" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/dep/osgi/org.argeo.dep.osgi.mina.filter.ssl.source/1.0.2.0001" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/dep/osgi/org.argeo.dep.osgi.springframework.ldap/1.2.1.A0001" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/argeo/dep/osgi/org.argeo.dep.osgi.springframework.ldap.source/1.2.1.A0001" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/codehaus/jackson/com.springsource.org.codehaus.jackson/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/codehaus/jackson/com.springsource.org.codehaus.jackson.source/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/codehaus/jackson/com.springsource.org.codehaus.jackson.mapper/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/codehaus/jackson/com.springsource.org.codehaus.jackson.mapper.source/1.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.commands/3.6.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.commands.source/3.6.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.contenttype/3.4.100.v20100505-1235" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.contenttype.source/3.4.100.v20100505-1235" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding/1.3.100" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.source/1.3.100" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.beans/1.2.100" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.beans.source/1.2.100" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.observable/1.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.observable.source/1.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.property/1.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.databinding.property.source/1.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.expressions/3.4.200.v20100505" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.expressions.source/3.4.200.v20100505" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.jobs/3.5.0.v20100515" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.jobs.source/3.5.0.v20100515" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.runtime/3.6.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/core/org.eclipse.core.runtime.source/3.6.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.app/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.app.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.common/3.6.0.v20100503" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.common.source/3.6.0.v20100503" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.http.jetty/2.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.http.jetty.source/2.0.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.http.registry/1.1.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.http.registry.source/1.1.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.http.servlet/1.1.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.http.servlet.source/1.1.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.launcher/1.1.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.launcher.source/1.1.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.preferences/3.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.preferences.source/3.3.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.registry/3.5.0.v20100503" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.registry.source/3.5.0.v20100503" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.security/1.0.200" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.security.source/1.0.200" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.security.ui/1.0.200" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/equinox/org.eclipse.equinox.security.ui.source/1.0.200" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/help/org.eclipse.help/3.5.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/help/org.eclipse.help.source/3.5.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/jface/org.eclipse.jface/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/jface/org.eclipse.jface.source/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/jface/org.eclipse.jface.databinding/1.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/jface/org.eclipse.jface.databinding.source/1.4.0" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/osgi/org.eclipse.osgi/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/osgi/org.eclipse.osgi.source/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/osgi/org.eclipse.osgi.services/3.3.0.v20101018" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/osgi/org.eclipse.osgi.services.source/3.3.0.v20101018" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.demo/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.demo.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.demo.databinding/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.demo.databinding.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.design.example/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.design.example.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.jface/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.jface.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.jface.databinding/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.jface.databinding.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.rwt/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.rwt.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.rwt.q07/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.rwt.q07.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.cheatsheets/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.cheatsheets.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.forms/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.forms.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.views/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.views.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.workbench/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/rap/org.eclipse.rap.ui.workbench.source/1.3.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/swt/org.eclipse.swt/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/ui/org.eclipse.ui/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/ui/org.eclipse.ui.source/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/ui/org.eclipse.ui.workbench/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/eclipse/ui/org.eclipse.ui.workbench.source/3.6.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/junit/com.springsource.junit/3.8.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/junit/com.springsource.junit.source/3.8.2" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/mortbay/jetty/org.mortbay.jetty.server/6.1.23" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/mortbay/jetty/org.mortbay.jetty.server.source/6.1.23" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/mortbay/jetty/org.mortbay.jetty.util/6.1.23" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/mortbay/jetty/org.mortbay.jetty.util.source/6.1.23" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/slf4j/com.springsource.slf4j.api/1.5.10" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/slf4j/com.springsource.slf4j.api.source/1.5.10" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/slf4j/com.springsource.slf4j.log4j/1.5.10" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/slf4j/com.springsource.slf4j.log4j.source/1.5.10" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/slf4j/com.springsource.slf4j.org.apache.commons.logging/1.5.10" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/slf4j/com.springsource.slf4j.org.apache.commons.logging.source/1.5.10" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.aop/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.aop.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.beans/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.beans.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.context/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.context.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.core/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.core.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.transaction/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.transaction.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.web/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.web.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.web.servlet/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/org.springframework.web.servlet.source/2.5.6.SEC01" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/osgi/org.springframework.osgi.core/1.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/osgi/org.springframework.osgi.core.source/1.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/osgi/org.springframework.osgi.extender/1.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/osgi/org.springframework.osgi.extender.source/1.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/osgi/org.springframework.osgi.io/1.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/osgi/org.springframework.osgi.io.source/1.2.1" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/security/org.springframework.security.core/2.0.5.RELEASE" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/security/org.springframework.security.core.source/2.0.5.RELEASE" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/ws/org.springframework.oxm/1.5.9.A" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/ws/org.springframework.oxm.source/1.5.9.A" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/ws/org.springframework.xml/1.5.9.A" type="Directory"/>
+<location path="${system_property:user.home}/.m2/repository/org/springframework/ws/org.springframework.xml.source/1.5.9.A" type="Directory"/>
+</locations>
+<includeBundles>
+<plugin id="com.ibm.icu"/>
+<plugin id="com.ibm.icu.source"/>
+<plugin id="com.springsource.json"/>
+<plugin id="com.springsource.json.source"/>
+<plugin id="com.springsource.edu.emory.mathcs.backport"/>
+<plugin id="com.springsource.edu.emory.mathcs.backport.source"/>
+<plugin id="com.springsource.javax.servlet"/>
+<plugin id="com.springsource.javax.servlet.source"/>
+<plugin id="com.springsource.javax.xml.stream"/>
+<plugin id="com.springsource.javax.xml.stream.source"/>
+<plugin id="com.springsource.jdbm"/>
+<plugin id="com.springsource.jdbm.source"/>
+<plugin id="com.springsource.antlr"/>
+<plugin id="com.springsource.antlr.source"/>
+<plugin id="com.springsource.org.antlr"/>
+<plugin id="com.springsource.org.antlr.source"/>
+<plugin id="com.springsource.org.aopalliance"/>
+<plugin id="com.springsource.org.aopalliance.source"/>
+<plugin id="com.springsource.org.apache.commons.codec"/>
+<plugin id="com.springsource.org.apache.commons.codec.source"/>
+<plugin id="com.springsource.org.apache.commons.collections"/>
+<plugin id="com.springsource.org.apache.commons.collections.source"/>
+<plugin id="com.springsource.org.apache.commons.io"/>
+<plugin id="com.springsource.org.apache.commons.io.source"/>
+<plugin id="com.springsource.org.apache.commons.lang"/>
+<plugin id="com.springsource.org.apache.commons.lang.source"/>
+<plugin id="com.springsource.org.apache.commons.logging"/>
+<plugin id="com.springsource.org.apache.commons.logging.source"/>
+<plugin id="com.springsource.org.apache.commons.pool"/>
+<plugin id="com.springsource.org.apache.commons.pool.source"/>
+<plugin id="com.springsource.org.apache.directory.server.changepw"/>
+<plugin id="com.springsource.org.apache.directory.server.changepw.source"/>
+<plugin id="com.springsource.org.apache.directory.server.core"/>
+<plugin id="com.springsource.org.apache.directory.server.core.source"/>
+<plugin id="com.springsource.org.apache.directory.server.core.shared"/>
+<plugin id="com.springsource.org.apache.directory.server.core.shared.source"/>
+<plugin id="com.springsource.org.apache.directory.server.jndi"/>
+<plugin id="com.springsource.org.apache.directory.server.jndi.source"/>
+<plugin id="com.springsource.org.apache.directory.server.kerberos"/>
+<plugin id="com.springsource.org.apache.directory.server.kerberos.source"/>
+<plugin id="com.springsource.org.apache.directory.server.kerberos.shared"/>
+<plugin id="com.springsource.org.apache.directory.server.kerberos.shared.source"/>
+<plugin id="com.springsource.org.apache.directory.server.ldap"/>
+<plugin id="com.springsource.org.apache.directory.server.ldap.source"/>
+<plugin id="com.springsource.org.apache.directory.server.ntp"/>
+<plugin id="com.springsource.org.apache.directory.server.ntp.source"/>
+<plugin id="com.springsource.org.apache.directory.server.protocol.shared"/>
+<plugin id="com.springsource.org.apache.directory.server.protocol.shared.source"/>
+<plugin id="com.springsource.org.apache.directory.shared.asn1"/>
+<plugin id="com.springsource.org.apache.directory.shared.asn1.source"/>
+<plugin id="com.springsource.org.apache.directory.shared.ldap"/>
+<plugin id="com.springsource.org.apache.directory.shared.ldap.source"/>
+<plugin id="com.springsource.org.apache.log4j"/>
+<plugin id="com.springsource.org.apache.log4j.source"/>
+<plugin id="com.springsource.org.apache.mina"/>
+<plugin id="com.springsource.org.apache.mina.source"/>
+<plugin id="com.springsource.org.apache.ws.commons.schema"/>
+<plugin id="com.springsource.org.apache.ws.commons.schema.source"/>
+<plugin id="org.argeo.basic.nodeps"/>
+<plugin id="org.argeo.basic.nodeps.source"/>
+<plugin id="org.argeo.eclipse.dep.common"/>
+<plugin id="org.argeo.eclipse.dep.rap"/>
+<plugin id="org.argeo.eclipse.ui"/>
+<plugin id="org.argeo.eclipse.ui.source"/>
+<plugin id="org.argeo.osgi.boot"/>
+<plugin id="org.argeo.osgi.boot.source"/>
+<plugin id="org.argeo.security.core"/>
+<plugin id="org.argeo.security.core.source"/>
+<plugin id="org.argeo.security.equinox"/>
+<plugin id="org.argeo.security.equinox.source"/>
+<plugin id="org.argeo.security.manager.ldap"/>
+<plugin id="org.argeo.security.services"/>
+<plugin id="org.argeo.security.ui"/>
+<plugin id="org.argeo.security.ui.source"/>
+<plugin id="org.argeo.server.ads"/>
+<plugin id="org.argeo.server.ads.source"/>
+<plugin id="org.argeo.server.ads.server"/>
+<plugin id="org.argeo.server.core"/>
+<plugin id="org.argeo.server.core.source"/>
+<plugin id="org.argeo.server.json"/>
+<plugin id="org.argeo.server.json.source"/>
+<plugin id="org.argeo.dep.osgi.directory.shared.asn.codec"/>
+<plugin id="org.argeo.dep.osgi.directory.shared.asn.codec.source"/>
+<plugin id="org.argeo.dep.osgi.mina.filter.ssl"/>
+<plugin id="org.argeo.dep.osgi.mina.filter.ssl.source"/>
+<plugin id="org.argeo.dep.osgi.springframework.ldap"/>
+<plugin id="org.argeo.dep.osgi.springframework.ldap.source"/>
+<plugin id="com.springsource.org.codehaus.jackson"/>
+<plugin id="com.springsource.org.codehaus.jackson.source"/>
+<plugin id="com.springsource.org.codehaus.jackson.mapper"/>
+<plugin id="com.springsource.org.codehaus.jackson.mapper.source"/>
+<plugin id="org.eclipse.core.commands"/>
+<plugin id="org.eclipse.core.commands.source"/>
+<plugin id="org.eclipse.core.contenttype"/>
+<plugin id="org.eclipse.core.contenttype.source"/>
+<plugin id="org.eclipse.core.databinding"/>
+<plugin id="org.eclipse.core.databinding.source"/>
+<plugin id="org.eclipse.core.databinding.beans"/>
+<plugin id="org.eclipse.core.databinding.beans.source"/>
+<plugin id="org.eclipse.core.databinding.observable"/>
+<plugin id="org.eclipse.core.databinding.observable.source"/>
+<plugin id="org.eclipse.core.databinding.property"/>
+<plugin id="org.eclipse.core.databinding.property.source"/>
+<plugin id="org.eclipse.core.expressions"/>
+<plugin id="org.eclipse.core.expressions.source"/>
+<plugin id="org.eclipse.core.jobs"/>
+<plugin id="org.eclipse.core.jobs.source"/>
+<plugin id="org.eclipse.core.runtime"/>
+<plugin id="org.eclipse.core.runtime.source"/>
+<plugin id="org.eclipse.equinox.app"/>
+<plugin id="org.eclipse.equinox.app.source"/>
+<plugin id="org.eclipse.equinox.common"/>
+<plugin id="org.eclipse.equinox.common.source"/>
+<plugin id="org.eclipse.equinox.http.jetty"/>
+<plugin id="org.eclipse.equinox.http.jetty.source"/>
+<plugin id="org.eclipse.equinox.http.registry"/>
+<plugin id="org.eclipse.equinox.http.registry.source"/>
+<plugin id="org.eclipse.equinox.http.servlet"/>
+<plugin id="org.eclipse.equinox.http.servlet.source"/>
+<plugin id="org.eclipse.equinox.launcher"/>
+<plugin id="org.eclipse.equinox.launcher.source"/>
+<plugin id="org.eclipse.equinox.preferences"/>
+<plugin id="org.eclipse.equinox.preferences.source"/>
+<plugin id="org.eclipse.equinox.registry"/>
+<plugin id="org.eclipse.equinox.registry.source"/>
+<plugin id="org.eclipse.equinox.security"/>
+<plugin id="org.eclipse.equinox.security.source"/>
+<plugin id="org.eclipse.equinox.security.ui"/>
+<plugin id="org.eclipse.equinox.security.ui.source"/>
+<plugin id="org.eclipse.help"/>
+<plugin id="org.eclipse.help.source"/>
+<plugin id="org.eclipse.jface"/>
+<plugin id="org.eclipse.jface.source"/>
+<plugin id="org.eclipse.jface.databinding"/>
+<plugin id="org.eclipse.jface.databinding.source"/>
+<plugin id="org.eclipse.osgi"/>
+<plugin id="org.eclipse.osgi.source"/>
+<plugin id="org.eclipse.osgi.services"/>
+<plugin id="org.eclipse.osgi.services.source"/>
+<plugin id="org.eclipse.rap.demo"/>
+<plugin id="org.eclipse.rap.demo.source"/>
+<plugin id="org.eclipse.rap.demo.databinding"/>
+<plugin id="org.eclipse.rap.demo.databinding.source"/>
+<plugin id="org.eclipse.rap.design.example"/>
+<plugin id="org.eclipse.rap.design.example.source"/>
+<plugin id="org.eclipse.rap.jface"/>
+<plugin id="org.eclipse.rap.jface.source"/>
+<plugin id="org.eclipse.rap.jface.databinding"/>
+<plugin id="org.eclipse.rap.jface.databinding.source"/>
+<plugin id="org.eclipse.rap.rwt"/>
+<plugin id="org.eclipse.rap.rwt.source"/>
+<plugin id="org.eclipse.rap.rwt.q07"/>
+<plugin id="org.eclipse.rap.rwt.q07.source"/>
+<plugin id="org.eclipse.rap.ui"/>
+<plugin id="org.eclipse.rap.ui.source"/>
+<plugin id="org.eclipse.rap.ui.cheatsheets"/>
+<plugin id="org.eclipse.rap.ui.cheatsheets.source"/>
+<plugin id="org.eclipse.rap.ui.forms"/>
+<plugin id="org.eclipse.rap.ui.forms.source"/>
+<plugin id="org.eclipse.rap.ui.views"/>
+<plugin id="org.eclipse.rap.ui.views.source"/>
+<plugin id="org.eclipse.rap.ui.workbench"/>
+<plugin id="org.eclipse.rap.ui.workbench.source"/>
+<plugin id="org.eclipse.swt"/>
+<plugin id="org.eclipse.ui"/>
+<plugin id="org.eclipse.ui.source"/>
+<plugin id="org.eclipse.ui.workbench"/>
+<plugin id="org.eclipse.ui.workbench.source"/>
+<plugin id="com.springsource.junit"/>
+<plugin id="com.springsource.junit.source"/>
+<plugin id="org.mortbay.jetty.server"/>
+<plugin id="org.mortbay.jetty.server.source"/>
+<plugin id="org.mortbay.jetty.util"/>
+<plugin id="org.mortbay.jetty.util.source"/>
+<plugin id="com.springsource.slf4j.api"/>
+<plugin id="com.springsource.slf4j.api.source"/>
+<plugin id="com.springsource.slf4j.log4j"/>
+<plugin id="com.springsource.slf4j.log4j.source"/>
+<plugin id="com.springsource.slf4j.org.apache.commons.logging"/>
+<plugin id="com.springsource.slf4j.org.apache.commons.logging.source"/>
+<plugin id="org.springframework.aop"/>
+<plugin id="org.springframework.aop.source"/>
+<plugin id="org.springframework.beans"/>
+<plugin id="org.springframework.beans.source"/>
+<plugin id="org.springframework.context"/>
+<plugin id="org.springframework.context.source"/>
+<plugin id="org.springframework.core"/>
+<plugin id="org.springframework.core.source"/>
+<plugin id="org.springframework.transaction"/>
+<plugin id="org.springframework.transaction.source"/>
+<plugin id="org.springframework.web"/>
+<plugin id="org.springframework.web.source"/>
+<plugin id="org.springframework.web.servlet"/>
+<plugin id="org.springframework.web.servlet.source"/>
+<plugin id="org.springframework.osgi.core"/>
+<plugin id="org.springframework.osgi.core.source"/>
+<plugin id="org.springframework.osgi.extender"/>
+<plugin id="org.springframework.osgi.extender.source"/>
+<plugin id="org.springframework.osgi.io"/>
+<plugin id="org.springframework.osgi.io.source"/>
+<plugin id="org.springframework.security.core"/>
+<plugin id="org.springframework.security.core.source"/>
+<plugin id="org.springframework.oxm"/>
+<plugin id="org.springframework.oxm.source"/>
+<plugin id="org.springframework.xml"/>
+<plugin id="org.springframework.xml.source"/>
+</includeBundles>
+</target>
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.security</groupId>
+ <version>0.2.2-SNAPSHOT</version>
+ <artifactId>plugins</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.security.ui.rap</artifactId>
+ <name>Commons Security UI RAP</name>
+ <packaging>jar</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.argeo.maven.plugins</groupId>
+ <artifactId>maven-argeo-osgi-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>resolve-pde-sources</id>
+ <goals>
+ <goal>pde-sources</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ <execution>
+ <id>generate-descriptors</id>
+ <goals>
+ <goal>descriptors</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ <execution>
+ <id>check-osgi</id>
+ <phase>test</phase>
+ <goals>
+ <goal>equinox</goal>
+ </goals>
+ <configuration>
+ <onlyCheck>true</onlyCheck>
+ <argsToAppend>
+ <arg>-clean</arg>
+ </argsToAppend>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.ui.rcp</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ <type>pom</type>
+ <exclusions>
+ <exclusion>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <!-- RAP -->
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.rap</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.security.ui.rcp</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+#Sat Jan 15 17:51:30 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?pde version="3.5"?>
+
+<product name="SecureRCP" application="org.argeo.security.ui.rcp.secureUi" useFeatures="false" includeLaunchers="true">
+
+ <configIni use="default">
+ </configIni>
+
+ <launcherArgs>
+ <programArgs>-console -clean</programArgs>
+ <vmArgs>-Dlog4j.configuration=file:/home/mbaudier/dev/src/commons/security/eclipse/plugins/org.argeo.security.ui.rcp/log4j.properties</vmArgs>
+ <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
+ </launcherArgs>
+
+ <launcher>
+ <solaris/>
+ <win useIco="false">
+ <bmp/>
+ </win>
+ </launcher>
+
+ <vm>
+ </vm>
+
+ <plugins>
+ <plugin id="com.ibm.icu"/>
+ <plugin id="com.springsource.antlr"/>
+ <plugin id="com.springsource.edu.emory.mathcs.backport"/>
+ <plugin id="com.springsource.javax.servlet"/>
+ <plugin id="com.springsource.javax.xml.stream"/>
+ <plugin id="com.springsource.jdbm"/>
+ <plugin id="com.springsource.junit"/>
+ <plugin id="com.springsource.org.aopalliance"/>
+ <plugin id="com.springsource.org.apache.commons.codec"/>
+ <plugin id="com.springsource.org.apache.commons.collections"/>
+ <plugin id="com.springsource.org.apache.commons.io"/>
+ <plugin id="com.springsource.org.apache.commons.lang"/>
+ <plugin id="com.springsource.org.apache.commons.pool"/>
+ <plugin id="com.springsource.org.apache.directory.server.changepw"/>
+ <plugin id="com.springsource.org.apache.directory.server.core" fragment="true"/>
+ <plugin id="com.springsource.org.apache.directory.server.core.shared"/>
+ <plugin id="com.springsource.org.apache.directory.server.jndi"/>
+ <plugin id="com.springsource.org.apache.directory.server.kerberos"/>
+ <plugin id="com.springsource.org.apache.directory.server.kerberos.shared"/>
+ <plugin id="com.springsource.org.apache.directory.server.ldap"/>
+ <plugin id="com.springsource.org.apache.directory.server.ntp"/>
+ <plugin id="com.springsource.org.apache.directory.server.protocol.shared"/>
+ <plugin id="com.springsource.org.apache.directory.shared.asn1"/>
+ <plugin id="com.springsource.org.apache.directory.shared.ldap"/>
+ <plugin id="com.springsource.org.apache.log4j"/>
+ <plugin id="com.springsource.org.apache.mina"/>
+ <plugin id="com.springsource.org.apache.ws.commons.schema"/>
+ <plugin id="com.springsource.org.codehaus.jackson"/>
+ <plugin id="com.springsource.org.codehaus.jackson.mapper"/>
+ <plugin id="com.springsource.slf4j.api"/>
+ <plugin id="com.springsource.slf4j.log4j" fragment="true"/>
+ <plugin id="com.springsource.slf4j.org.apache.commons.logging"/>
+ <plugin id="org.argeo.basic.nodeps"/>
+ <plugin id="org.argeo.dep.osgi.directory.shared.asn.codec" fragment="true"/>
+ <plugin id="org.argeo.dep.osgi.mina.filter.ssl" fragment="true"/>
+ <plugin id="org.argeo.dep.osgi.springframework.ldap"/>
+ <plugin id="org.argeo.eclipse.ui"/>
+ <plugin id="org.argeo.security.core"/>
+ <plugin id="org.argeo.security.equinox"/>
+ <plugin id="org.argeo.security.manager.ldap"/>
+ <plugin id="org.argeo.security.services"/>
+ <plugin id="org.argeo.security.ui"/>
+ <plugin id="org.argeo.security.ui.rcp"/>
+ <plugin id="org.argeo.server.ads"/>
+ <plugin id="org.argeo.server.ads.server"/>
+ <plugin id="org.argeo.server.core"/>
+ <plugin id="org.argeo.server.json"/>
+ <plugin id="org.eclipse.core.commands"/>
+ <plugin id="org.eclipse.core.contenttype"/>
+ <plugin id="org.eclipse.core.databinding"/>
+ <plugin id="org.eclipse.core.databinding.observable"/>
+ <plugin id="org.eclipse.core.databinding.property"/>
+ <plugin id="org.eclipse.core.expressions"/>
+ <plugin id="org.eclipse.core.jobs"/>
+ <plugin id="org.eclipse.core.runtime"/>
+ <plugin id="org.eclipse.equinox.app"/>
+ <plugin id="org.eclipse.equinox.common"/>
+ <plugin id="org.eclipse.equinox.preferences"/>
+ <plugin id="org.eclipse.equinox.registry"/>
+ <plugin id="org.eclipse.equinox.security"/>
+ <plugin id="org.eclipse.equinox.security.ui"/>
+ <plugin id="org.eclipse.help"/>
+ <plugin id="org.eclipse.jface"/>
+ <plugin id="org.eclipse.jface.databinding"/>
+ <plugin id="org.eclipse.osgi"/>
+ <plugin id="org.eclipse.swt"/>
+ <plugin id="org.eclipse.swt.gtk.linux.x86" fragment="true"/>
+ <plugin id="org.eclipse.swt.gtk.linux.x86_64" fragment="true"/>
+ <plugin id="org.eclipse.swt.win32.win32.x86" fragment="true"/>
+ <plugin id="org.eclipse.ui"/>
+ <plugin id="org.eclipse.ui.workbench"/>
+ <plugin id="org.springframework.aop"/>
+ <plugin id="org.springframework.beans"/>
+ <plugin id="org.springframework.context"/>
+ <plugin id="org.springframework.core"/>
+ <plugin id="org.springframework.osgi.core"/>
+ <plugin id="org.springframework.osgi.extender"/>
+ <plugin id="org.springframework.osgi.io"/>
+ <plugin id="org.springframework.oxm"/>
+ <plugin id="org.springframework.security.core"/>
+ <plugin id="org.springframework.transaction"/>
+ <plugin id="org.springframework.web.servlet"/>
+ <plugin id="org.springframework.xml"/>
+ </plugins>
+
+ <configurations>
+ <plugin id="org.argeo.security.manager.ldap" autoStart="true" startLevel="0" />
+ <plugin id="org.argeo.security.services" autoStart="true" startLevel="0" />
+ <plugin id="org.argeo.security.ui" autoStart="true" startLevel="0" />
+ <plugin id="org.argeo.security.ui.rcp" autoStart="true" startLevel="0" />
+ <plugin id="org.argeo.server.ads.server" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.equinox.preferences" autoStart="true" startLevel="0" />
+ <plugin id="org.eclipse.equinox.security.ui" autoStart="true" startLevel="0" />
+ <plugin id="org.springframework.osgi.extender" autoStart="true" startLevel="0" />
+ </configurations>
+
+</product>
--- /dev/null
+argeo.osgi.start=\
+com.springsource.javax.servlet,\
+org.eclipse.core.runtime,\
+org.eclipse.equinox.common,\
+org.eclipse.equinox.http.jetty,\
+org.eclipse.equinox.http.registry,\
+org.eclipse.equinox.launcher,\
+org.eclipse.rap.demo,\
+org.mortbay.jetty.server,\
+org.springframework.osgi.extender,\
+org.argeo.server.ads.server,\
+org.argeo.security.manager.ldap,\
+org.argeo.security.services,\
+org.argeo.security.equinox,\
+org.argeo.security.ui,\
+org.argeo.security.ui.rcp,\
+
+eclipse.ignoreApp=true
+osgi.noShutdown=true
+
+log4j.configuration=file:../../log4j.properties
+
+org.eclipse.equinox.http.jetty.log.stderr.threshold=debug
+org.osgi.service.http.port=9090
--- /dev/null
+source.. = src/main/java/
+output.. = target/classes/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ .,\
+ log4j.properties,\
+ jaas_config.txt
--- /dev/null
+/* XPM */\r
+static char * icon48_xpm[] = {\r
+"48 48 256 2",\r
+" c #4B4B3B3B9090",\r
+". c #0D0D0E0E5454",\r
+"X c #11110E0E5B5B",\r
+"o c #17170F0F6363",\r
+"O c #1D1D13136969",\r
+"+ c #212114146C6C",\r
+"@ c #252514147171",\r
+"# c #282811116C6C",\r
+"$ c #26260D0D6363",\r
+"% c #22220B0B5E5E",\r
+"& c #1C1C0B0B5A5A",\r
+"* c #1C1C0B0B5252",\r
+"= c #1B1B05055353",\r
+"- c #161606064D4D",\r
+"; c #161605054949",\r
+": c #111104044848",\r
+"> c #131304044545",\r
+", c #131305054242",\r
+"< c #141410105E5E",\r
+"1 c #2C2C15157373",\r
+"2 c #2B2B1B1B7575",\r
+"3 c #343416167272",\r
+"4 c #313113136E6E",\r
+"5 c #222209095757",\r
+"6 c #1B1B06064D4D",\r
+"7 c #15150B0B4242",\r
+"8 c #13130C0C5555",\r
+"9 c #2E2E1B1B7878",\r
+"0 c #33331F1F7C7C",\r
+"q c #343418187878",\r
+"w c #3B3B1C1C7575",\r
+"e c #2E2E10106767",\r
+"r c #1B1B07074747",\r
+"t c #18180B0B4646",\r
+"y c #151513136262",\r
+"u c #1A1A15156464",\r
+"i c #34341F1F7777",\r
+"p c #40401E1E8080",\r
+"a c #42421B1B7A7A",\r
+"s c #3B3B15157474",\r
+"d c #2B2B0B0B5B5B",\r
+"f c #222207075252",\r
+"g c #373727277A7A",\r
+"h c #474724248484",\r
+"j c #393915156E6E",\r
+"k c #373711116A6A",\r
+"l c #343413136363",\r
+"z c #232319196E6E",\r
+"x c #292919197070",\r
+"c c #3C3C2C2C8282",\r
+"v c #444431318585",\r
+"b c #494934348A8A",\r
+"n c #505026268A8A",\r
+"m c #3D3D1B1B6E6E",\r
+"M c #31310E0E5C5C",\r
+"N c #2B2B0D0D5353",\r
+"B c #222207074A4A",\r
+"V c #52523C3C9292",\r
+"C c #58583C3C9494",\r
+"Z c #5D5D44449797",\r
+"A c #5C5C2E2E9292",\r
+"S c #676733339595",\r
+"D c #424228287575",\r
+"F c #29290A0A4F4F",\r
+"G c #6C6C4A4A9E9E",\r
+"H c #72725454A7A7",\r
+"J c #8C8C6D6DB2B2",\r
+"K c #343424246E6E",\r
+"L c #3A3A23236A6A",\r
+"P c #3A3A1C1C6767",\r
+"I c #24240A0A4B4B",\r
+"U c #151518186161",\r
+"Y c #76766F6FA5A5",\r
+"T c #ADAD9191CCCC",\r
+"R c #98988989D3D3",\r
+"E c #45453B3B8686",\r
+"W c #3C3C35357979",\r
+"Q c #363631317575",\r
+"! c #32322D2D6B6B",\r
+"~ c #323229296363",\r
+"^ c #30301F1F6262",\r
+"/ c #323218185E5E",\r
+"( c #272707074B4B",\r
+") c #202028286C6C",\r
+"_ c #1E1E1D1D6868",\r
+"` c #9A9A8282BBBB",\r
+"' c #C8C8B3B3D3D3",\r
+"] c #B3B3AFAFE7E7",\r
+"[ c #84847272C6C6",\r
+"{ c #58585757A3A3",\r
+"} c #3F3F3C3C8A8A",\r
+"| c #3B3B3A3A8484",\r
+" . c #414139397D7D",\r
+".. c #3D3D39397A7A",\r
+"X. c #37372E2E6E6E",\r
+"o. c #2C2C21215A5A",\r
+"O. c #2E2E1B1B5B5B",\r
+"+. c #F5F5EFEFF5F5",\r
+"@. c #656566669A9A",\r
+"#. c #47474B4B8E8E",\r
+"$. c #3C3C44447B7B",\r
+"%. c #444442428080",\r
+"&. c #45453E3E8181",\r
+"*. c #40403C3C8181",\r
+"=. c #3D3D33337474",\r
+"-. c #3B3B30306E6E",\r
+";. c #38382D2D6969",\r
+":. c #303026265D5D",\r
+">. c #2C2C15155A5A",\r
+",. c #1F1F1C1C7070",\r
+"<. c #25251E1E7171",\r
+"1. c #59595C5C9191",\r
+"2. c #4D4D53538989",\r
+"3. c #4C4C49498484",\r
+"4. c #484845458585",\r
+"5. c #494941418585",\r
+"6. c #494940408181",\r
+"7. c #2F2F1C1C5353",\r
+"8. c #2B2B28287676",\r
+"9. c #323231317F7F",\r
+"0. c #545452528B8B",\r
+"q. c #51514E4E8989",\r
+"w. c #4E4E4B4B8C8C",\r
+"e. c #4C4C47478686",\r
+"r. c #46463D3D7E7E",\r
+"t. c #434336367A7A",\r
+"y. c #2B2B13135555",\r
+"u. c #47473D3D8D8D",\r
+"i. c #575757578E8E",\r
+"p. c #48483E3E7F7F",\r
+"a. c #46463A3A7D7D",\r
+"s. c #424235357575",\r
+"d. c #404034347171",\r
+"f. c #BFBFCBCBFAFA",\r
+"g. c #B8B8A8A8DDDD",\r
+"h. c #5E5E60609292",\r
+"j. c #565655558C8C",\r
+"k. c #4B4B44448282",\r
+"l. c #454539397B7B",\r
+"z. c #434338387878",\r
+"x. c #3F3F32326D6D",\r
+"c. c #3D3D30306969",\r
+"v. c #3A3A2E2E6363",\r
+"b. c #36362A2A5C5C",\r
+"n. c #343424245555",\r
+"m. c #30301E1E4D4D",\r
+"M. c #49493C3C8282",\r
+"N. c #5E5E4F4F8C8C",\r
+"B. c #56563B3B8B8B",\r
+"V. c #545407078585",\r
+"C. c #424234347272",\r
+"Z. c #9797A4A4F7F7",\r
+"A. c #444436367676",\r
+"S. c #7D7D7979D5D5",\r
+"D. c #464640408A8A",\r
+"F. c #44444B4B8282",\r
+"G. c #414107077777",\r
+"H. c #71716161C1C1",\r
+"J. c #303039397979",\r
+"K. c #8E8E8E8EE6E6",\r
+"L. c #404033338B8B",\r
+"P. c #4A4A45458C8C",\r
+"I. c #46463A3A8080",\r
+"U. c #363629295454",\r
+"Y. c #303022224848",\r
+"T. c #424237377575",\r
+"R. c #2E2E1D1D6363",\r
+"E. c #79798383EAEA",\r
+"W. c #74747B7BE4E4",\r
+"Q. c #6D6D7676D6D6",\r
+"!. c #6A6A7171CECE",\r
+"~. c #66666969C6C6",\r
+"^. c #62626565BCBC",\r
+"/. c #5F5F6060B5B5",\r
+"(. c #5B5B5B5BACAC",\r
+"). c #535353539898",\r
+"_. c #4F4F4F4FA4A4",\r
+"`. c #54544D4DA4A4",\r
+"'. c #323204046B6B",\r
+"]. c #303035357979",\r
+"[. c #313122224343",\r
+"{. c #5A5A5B5BB7B7",\r
+"}. c #484846468080",\r
+"|. c #454541417575",\r
+" X c #4B4B31318282",\r
+".X c #47473C3C8484",\r
+"XX c #3E3E35356E6E",\r
+"oX c #2F2F26264040",\r
+"OX c #2B2B23233A3A",\r
+"+X c #262619195C5C",\r
+"@X c #252515155A5A",\r
+"#X c #55555151B3B3",\r
+"$X c #3C3C2D2D5D5D",\r
+"%X c #39392F2F5656",\r
+"&X c #37372D2D5050",\r
+"*X c #25251F1F3030",\r
+"=X c #24241D1D4343",\r
+"-X c #202013135656",\r
+";X c #41413B3B6C6C",\r
+":X c #444442429696",\r
+">X c #212100005E5E",\r
+",X c #444436367272",\r
+"<X c #444436366F6F",\r
+"1X c #424236366868",\r
+"2X c #3F3F34346161",\r
+"3X c #3C3C32325A5A",\r
+"4X c #34342A2A4A4A",\r
+"5X c #21211B1B2121",\r
+"6X c #22221C1C6363",\r
+"7X c #2D2D01015E5E",\r
+"8X c #20201B1B2525",\r
+"9X c #49492F2F7B7B",\r
+"0X c #434334346C6C",\r
+"qX c #323229294545",\r
+"wX c #1C1C10104F4F",\r
+"eX c #222217176363",\r
+"rX c #37371E1E6B6B",\r
+"tX c #424232326E6E",\r
+"yX c #444433336969",\r
+"uX c #424233336565",\r
+"iX c #1E1E1A1A1E1E",\r
+"pX c #161601014C4C",\r
+"aX c #1C1C11115454",\r
+"sX c #252503035B5B",\r
+"dX c #414131316A6A",\r
+"fX c #22221F1F7878",\r
+"gX c #272724246767",\r
+"hX c #1D1D16165E5E",\r
+"jX c #131305055151",\r
+"kX c #40402F2F6464",\r
+"lX c #111107074E4E",\r
+"zX c #0C0C05054B4B",\r
+"xX c #22221E1E5757",\r
+"cX c #1A1A0D0D4D4D",\r
+"vX c #16160B0B4D4D",\r
+"bX c #060604044747",\r
+"nX c #040403034343",\r
+"mX c #3B3B27276565",\r
+"MX c #0E0E03034141",\r
+"NX c #111106064A4A",\r
+"BX c #0E0E04044646",\r
+"VX c #111105053B3B",\r
+"CX c #0D0D01013A3A",\r
+"ZX c #030305053F3F",\r
+"AX c #0F0F0F0F4C4C",\r
+"SX c #020207073B3B",\r
+"DX c #0D0D03034646",\r
+"FX c #0B0B02023F3F",\r
+"GX c #0D0D02023434",\r
+"HX c #0A0A0E0E4444",\r
+"JX c #161614145252",\r
+"KX c #0B0B04044646",\r
+"LX c #0A0A03034444",\r
+"PX c #1D1D21215757",\r
+"IX c #090910104040",\r
+"UX c #18181E1E5353",\r
+" ",\r
+" . . . . X X o o o o O + + @ @ @ @ @ @ @ # # # # # # $ $ % % & & & & * = - - - ; : > > , , , ",\r
+" . . X X < < o o O O + @ 1 2 2 1 1 1 1 1 1 1 1 3 4 # # $ $ $ % % % 5 = = 6 6 - ; ; > > , , 7 ",\r
+" . 8 < < < o O O + @ @ 2 9 9 0 0 q q q q q q q w 3 4 4 e e $ $ $ $ % 5 = = 6 6 6 ; ; > > r t ",\r
+" . X < y u O O + @ 1 2 i 0 0 p p p p p p p a a p a s 3 4 4 e e e e d 5 5 f f 6 6 6 ; ; r r t ",\r
+" X < y u O + + @ 2 9 0 g p p h h h h h h h p h h a a s s j k k j l d d 5 5 f f 6 6 r r r r r ",\r
+" X < y O z x x 9 0 g c v b n n n n n n n n n n n h a a s s j j m l M d d N f f B B B B r r r ",\r
+" < y u + z 2 0 c c b V C Z C C A A A A A S S S n h D w w m m m m k l M d d N f F F F B r r r ",\r
+" < y O z z 9 c b V Z G H H H G S G G J J H V v c g g K K K K L P l l l M M N N N N I B B r r ",\r
+" U u + z x i v C H Y J J J J H J T R H V E W W Q Q Q Q ! ! ! ~ ^ ^ / / M M M M M N ( B B r r ",\r
+" ) _ z x 9 g b Z Y ` ' ' ' T T ] [ { } | .........W W Q Q X.! ~ ~ o.O./ / / / N F ( B B B r ",\r
+" ) ) z x i c V G J ' +.+.+.+.] [ @.#.$.%.%.%.&.*. . .....W =.-.X.;.~ :.o.O.^ >.N F ( B B B B ",\r
+" ) ,.<.2 g v C H J ' +.+.+.+.T Y 1.2.3.4.4.4.5.6.&.&. . ...W =.=.-.;.~ :.o.7.>.N F F ( B I I ",\r
+" ) ,.<.8.9.b C H J T +.+.+.' J @.1.0.q.q.w.e.4.5.6.&.r. . .t.W =.=.-.;.~ :.o.7.y.N F ( ( I I ",\r
+" 8.8.8.9.| u.C G J T +.+.' ` Y @.1.i.0.q.q.e.e.5.6.p.r.a. .t.t.s.d.d.-.;.~ :.7.7.y.F F ( I I ",\r
+" 9.c c c v b A S H ' f.g.` Y @.h.1.i.j.0.q.q.e.k.6.p.r.a.l.t.z.s.s.d.x.c.v.b.n.m.7.N F F F I ",\r
+" <.g M.N.B.B.n V.J f.R J @.h.h.1.i.i.j.j.0.q.3.k.6.p.r.a.l.l.z.s.C.d.x.x.c.v.b.n.m.y.N F F F ",\r
+" + x i v B.Z Z G g.Z.[ @.2.i.i.j.j.j.j.j.0.q.3.k.6.p.p.a.l.l.A.s.C.C.d.x.c.v.b.n.m.7.y.N N y. ",\r
+" O # 3 w p n Z ` f.S.H D.F.q.0.0.0.0.j.0.q.q.3.k.6.p.r.a.a.l.A.s.s.C.d.x.x.c.v.b.n.m.y.y.y.y. ",\r
+" O # 4 s a G.V.T Z.H.V J.%.e.w.q.0.0.0.0.q.q.e.k.6.p.r.a.a.l.z.A.s.C.d.d.x.c.v.b.n.m.7.>.y.y. ",\r
+" O # 4 s w G.A f.K.H L...4.P.w.w.w.q.q.q.q.e.e.5.6.M.I.I.a.a.l.z.A.s.d.d.x.c.v.v.U.Y.7.O.>.y. ",\r
+" $ # 4 3 s G.G f.S.Z 9.*.D.P.P.w.w.w.w.w.e.e.5.5.M.M.I.I.a.a.l.z.T.s.d.d.x.x.c.v.U.Y.m.R.>.>. ",\r
+" E.E.W.W.W.W.E.Z.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.~.~.~.~.~.~.^.^.^.^.^./././.(.{ { )._.`._. ",\r
+" + # 3 w s '.` f.H.V ].*.D.P.P.P.P.P.P.P.5.5.5.M.M.M.I.I.a.l.z.z.T.T.s.d.d.x.c.v.U.Y.[.^ O.>. ",\r
+" ~.~.~.~.~.~.K.Z.S.~.{.^.^.^.^.^.^.^.^././././././.(.(.(.(.(.(.{ { { { { ).).).w.w.}.|.P.u.} ",\r
+" .I.6. X X XT f.H.b ].*.E D.D.D.D.5.5..X.XM.M.I.I.a.a.l.l.z.z.T.T.T.d.XXx.c.v.b.U.oXOXR.+X@X ",\r
+" E.E.E.W.W.W.K.Z.E.W.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.!.~.~.~.~.~.~.^.^.^.^.^./././.(.{ { ).).#X_._. ",\r
+" & % $ e '.= H f.H.b 8.W *.E E E .X.X.XI.I.I.I.a.a.l.l.z.z.T.T.T.C.XXXXc.v.$X%X&XY.*X=X2 @X-X ",\r
+" {.{.{.{.{.#X~.Z.W.~.{.{./././././././././.(.(.(.(.(.(.(.{ { { { { { ).).).w.w.3.}.;X%.:X} } ",\r
+" & & % $ e >XV.f.S.C K X.W t. . .l.l.t.t.t.t.A.A.A.,X,X,X,X,X<X;X1X1X2X3X%X&X4XoX*X5Xo.6X-X-X ",\r
+" & & % $ $ >X7X` Z.Z D ! =.=.s.t.t.t.A.A.s.A.,X,X,X,X<X<X<X<X;X1X2X2X3X%X&X4XoXOX8X5X<.@X-X-X ",\r
+" 8 & & $ e K 9XJ f.^. XK X.=.=.s.s.s.s.s.C.C.C.C.<X0X0X0X1X1X1X2X2X3X%X&X4XqXOX*X8X=X<.-X-XwX ",\r
+" 8 & eXK k.@.M. Xg.E.B.rX~ -.d.d.C.C.C.C.C.tX0X0X0XyXyX1X1XuX2X2X3X%X&X4XqXoXOX8XiX6XeX-X-XwX ",\r
+" 6XQ h.Y N.K e pXB.f./.9Xo.;.-.x.d.tXtXtXtXtX0X0XyXyXyXuXuX2X2X3X%X&X4XqXoXOX*XiX=X_ aX-XaXwX ",\r
+" Y Y .R.@X% sX= 7XT Z.V P :.;.c.x.x.x.tXdXdXdXyXyXuXuX2X2X3X3X%X&X4XqXoXOX*X8X*XfXaXaXaXwXwX ",\r
+" gXhX& * & 5 5 sXjXa ] S.9X/ ~ v.c.dXdXdXdXdXuXuXuXkX2X2X3X%X%X&X4XqXoXOX*X8XiX<.hXwXwXaXwXwX ",\r
+" 8 lXlXjX= * 5 5 = zX9X] H.D 7.b.v.v.kXc.kXkXkXkXkX2X$X3X%X&X&X4XqXoXOX*X8XiXxXhXwXcXcXwXwXwX ",\r
+" zXzXlXlXjX= = f f sXD Y ] ~.D 7.n.b.v.v.kXkXkXkX$X$X%X%X&X4XqXoXoXOX*X8X5XgXu cXvXvXcXcXwXwX ",\r
+" bXbXzXlXlX- = * @XX.h.e D T S.D n.m.b.$X$X$X$X$X%X%X&X&X4XqXoXOX*X8X8X*X<.hXvX; ; vXvXvXcXwX ",\r
+" nXbXzXzXlXlX- -XX.Y R.pXpXP J K.Z mXm.n.U.U.U.U.U.4X4XY.oXOX*X8X8X8X=X,.aXvX; > > > t t t cX ",\r
+" nXbXbXzXzXlXaXXXY +Xf = f = 7XtXR R mXn.Y.[.[.[.[.OX*X*X8X5X*X=X,.u vXvX; > > MXMX, 7 t t ",\r
+" nXnXnXbXzXvX-.Y +XcX6 6 = = = d L B.G H `.X.:.7.m.=X=X=X=X=X6X,.u cXvXNX: BX> MXVXCXVX7 7 7 ",\r
+" ZXZXnXbXAXgX@.+XvX; - - - - * @XR.>.sX>.R.i 0 x eXeXeXeXO hXaXcXvXNX: BXMXMXMXVXCXCXCXVX7 7 ",\r
+" SXZXZXAXgXN.aXNX: : NXNXNX- * +X+X* 6 6 6 * * * * * * * vXvX- NX: DXBXMXMXFXCXCXCXCXGXVXVX7 ",\r
+" SXSXHXgX0.JXKXLXKXKXDX: : NX* @X-X- - - - - - - - - - - NX: DXDXDXMXMXFXFXCXCXCXCXGXGXGXVXVX ",\r
+" SXHXPX3.JXnXnXnXnXbXLXKXKXNXaX-XvX: : NX: : : : : : : BXDXDXLXMXMXFXFXCXCXCXCXGXGXGXGXGXGXGX ",\r
+" IXUX$.AXZXZXZXZXnXnXnXLXLXNXJXvXBXDXBXBXBXBXDXDXDXDXLXDXLXLXFXFXFXFXCXCXCXCXGXGXGXGXGXGXGXGX ",\r
+" "};\r
--- /dev/null
+log4j.rootLogger=WARN, console
+
+## Levels
+log4j.logger.org.argeo=DEBUG
+log4j.logger.org.springframework.security=DEBUG
+
+log4j.logger.org.apache.catalina=INFO
+log4j.logger.org.apache.coyote=INFO
+log4j.logger.org.apache.tomcat=INFO
+
+log4j.logger.org.apache.directory.server=INFO
+log4j.logger.org.apache.directory.server.core.partition=ERROR
+log4j.logger.org.apache.directory.server.core.schema.bootstrap.BootstrapAttributeTypeRegistry=ERROR
+
+log4j.logger.org.apache.jackrabbit=WARN
+log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR
+
+## Appenders
+# console is set to be a ConsoleAppender.
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+
+# console uses PatternLayout.
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c - [%t]%n
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+
+ <extension
+ id="secureUi"
+ name="Argeo Secure UI"
+ point="org.eclipse.core.runtime.applications">
+ <application cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.argeo.security.ui.rcp.SecureRcp">
+ </run>
+ </application>
+ </extension>
+ <extension
+ id="secureWebUi"
+ name="Argeo Secure Web UI"
+ point="org.eclipse.core.runtime.applications">
+ <application cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.argeo.security.ui.rcp.SecureRap">
+ </run>
+ </application>
+ </extension>
+
+</plugin>
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.security</groupId>
+ <version>0.2.2-SNAPSHOT</version>
+ <artifactId>plugins</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.security.ui.rcp</artifactId>
+ <name>Commons Security UI RCP</name>
+ <packaging>jar</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>${version.maven-bundle-plugin}</version>
+ <configuration>
+ <instructions>
+ <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
+ <Require-Bundle>org.eclipse.ui;resolution:=optional,org.eclipse.rap.ui;resolution:=optional,org.eclipse.core.runtime</Require-Bundle>
+ <Import-Package>*</Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.argeo.maven.plugins</groupId>
+ <artifactId>maven-argeo-osgi-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>resolve-pde-sources</id>
+ <goals>
+ <goal>pde-sources</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ <execution>
+ <id>generate-descriptors</id>
+ <goals>
+ <goal>descriptors</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ </execution>
+ <execution>
+ <id>check-osgi</id>
+ <phase>test</phase>
+ <goals>
+ <goal>equinox</goal>
+ </goals>
+ <configuration>
+ <onlyCheck>true</onlyCheck>
+ <argsToAppend>
+ <arg>-clean</arg>
+ </argsToAppend>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <!-- Argeo Security -->
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.equinox</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.ui</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.server</groupId>
+ <artifactId>org.argeo.server.dep.ads</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ <type>pom</type>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.server</groupId>
+ <artifactId>org.argeo.server.ads.server</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.services</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.manager.ldap</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.server</groupId>
+ <artifactId>org.argeo.server.ads</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.dep.osgi</groupId>
+ <artifactId>org.argeo.dep.osgi.springframework.ldap</artifactId>
+ </dependency>
+
+ <!-- Argeo Eclipse distribution (common dependencies for both RAP and RCP) -->
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- TODO: to be removed -->
+ <dependency>
+ <groupId>org.argeo.commons.server</groupId>
+ <artifactId>org.argeo.server.json</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- RCP only dependency, needed at compile time -->
+ <dependency>
+ <groupId>org.eclipse.ui</groupId>
+ <artifactId>org.eclipse.ui</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Commons -->
+ <dependency>
+ <groupId>org.argeo.commons.basic</groupId>
+ <artifactId>org.argeo.basic.nodeps</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+
+ <!-- Others -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
+ </dependency>
+ <!-- Commons Dep -->
+ <dependency>
+ <groupId>org.argeo.commons.basic</groupId>
+ <artifactId>org.argeo.basic.dep.log4j</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ <type>pom</type>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+package org.argeo.security.ui.rcp;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+
+public class RapSecureWorkbenchWindowAdvisor extends
+ SecureWorkbenchWindowAdvisor {
+
+ public RapSecureWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+ super(configurer);
+ }
+
+ public void preWindowOpen() {
+ IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+// configurer.setInitialSize(new Point(800, 600));
+ configurer.setShowCoolBar(false);
+ configurer.setShowMenuBar(true);
+ configurer.setShowStatusLine(true);
+ configurer.setShowPerspectiveBar(true);
+ configurer.setTitle("Argeo Secure UI"); //$NON-NLS-1$
+ // Full screen, see
+ // http://dev.eclipse.org/newslists/news.eclipse.technology.rap/msg02697.html
+// configurer.setShellStyle(SWT.NONE);
+// Rectangle bounds = Display.getDefault().getBounds();
+// configurer.setInitialSize(new Point(bounds.width, bounds.height));
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.rcp;
+
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+
+public class SecureActionBarAdvisor extends ActionBarAdvisor {
+ private IWorkbenchAction exitAction;
+ // private IWorkbenchAction aboutAction;
+ private IWorkbenchAction newWindowAction;
+ private IWorkbenchAction preferences = null;
+
+ public SecureActionBarAdvisor(IActionBarConfigurer configurer) {
+ super(configurer);
+ }
+
+ protected void makeActions(IWorkbenchWindow window) {
+ preferences = ActionFactory.PREFERENCES.create(window);
+ register(preferences);
+ exitAction = ActionFactory.QUIT.create(window);
+ register(exitAction);
+
+ // aboutAction = ActionFactory.ABOUT.create(window);
+ // register(aboutAction);
+
+ newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
+ register(newWindowAction);
+ }
+
+ protected void fillMenuBar(IMenuManager menuBar) {
+ MenuManager fileMenu = new MenuManager("&File",
+ IWorkbenchActionConstants.M_FILE);
+ MenuManager editMenu = new MenuManager("&Edit",
+ IWorkbenchActionConstants.M_EDIT);
+ MenuManager helpMenu = new MenuManager("&Help",
+ IWorkbenchActionConstants.M_HELP);
+
+ menuBar.add(fileMenu);
+ menuBar.add(editMenu);
+ // Add a group marker indicating where action set menus will appear.
+ menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+ menuBar.add(helpMenu);
+
+ // File
+ fileMenu.add(newWindowAction);
+ fileMenu.add(new Separator());
+ fileMenu.add(exitAction);
+
+ // Edit
+ editMenu.add(preferences);
+
+ // Help
+ // helpMenu.add(aboutAction);
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.rcp;
+
+import java.security.PrivilegedAction;
+
+import javax.security.auth.Subject;
+
+import org.argeo.security.equinox.CurrentUser;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class SecureRap implements IApplication {
+ public Object start(IApplicationContext context) throws Exception {
+ String username = CurrentUser.getUsername();
+ Integer result = null;
+ Display display = PlatformUI.createDisplay();
+ try {
+ result = (Integer) Subject.doAs(CurrentUser.getSubject(),
+ getRunAction(display));
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ display.dispose();
+ }
+ return result;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private PrivilegedAction getRunAction(final Display display) {
+ return new PrivilegedAction() {
+
+ public Object run() {
+ int result = PlatformUI.createAndRunWorkbench(display,
+ new ApplicationWorkbenchAdvisor());
+ return new Integer(result);
+ }
+ };
+ }
+
+ public void stop() {
+ final IWorkbench workbench;
+ try {
+ workbench = PlatformUI.getWorkbench();
+ } catch (Exception e) {
+ return;
+ }
+ if (workbench == null)
+ return;
+ final Display display = workbench.getDisplay();
+ display.syncExec(new Runnable() {
+
+ public void run() {
+ if (!display.isDisposed())
+ workbench.close();
+ }
+ });
+ }
+
+ class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
+
+ private static final String PERSPECTIVE_ID = "org.argeo.security.ui.securityPerspective";
+
+ public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(
+ IWorkbenchWindowConfigurer configurer) {
+ return new ApplicationWorkbenchWindowAdvisor(configurer);
+ }
+
+ public String getInitialWindowPerspectiveId() {
+ return PERSPECTIVE_ID;
+ }
+ }
+
+ class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
+
+ public ApplicationWorkbenchWindowAdvisor(
+ IWorkbenchWindowConfigurer configurer) {
+ super(configurer);
+ }
+
+ public ActionBarAdvisor createActionBarAdvisor(
+ IActionBarConfigurer configurer) {
+ return new ActionBarAdvisor(configurer);
+ }
+
+ public void preWindowOpen() {
+ IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+ configurer.setInitialSize(new Point(500, 300));
+ configurer.setShowCoolBar(false);
+ configurer.setShowMenuBar(false);
+ configurer.setShowStatusLine(false);
+ configurer.setTitle("Equinox Security on RAP");
+ }
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.rcp;
+
+import java.security.PrivilegedAction;
+
+import javax.security.auth.Subject;
+
+import org.argeo.security.equinox.CurrentUser;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+public class SecureRcp implements IApplication {
+ public Object start(IApplicationContext context) throws Exception {
+ String username = CurrentUser.getUsername();
+ Integer returnCode = null;
+ Display display = PlatformUI.createDisplay();
+ try {
+ returnCode = (Integer) Subject.doAs(CurrentUser.getSubject(),
+ getRunAction(display));
+ if (returnCode == PlatformUI.RETURN_RESTART)
+ return IApplication.EXIT_RESTART;
+ else
+ return IApplication.EXIT_OK;
+ } catch (Exception e) {
+ // e.printStackTrace();
+ IStatus status = new Status(IStatus.ERROR,
+ "org.eclipse.rap.security.demo", "Login failed", e);
+ ErrorDialog.openError(null, "Error", "Login failed", status);
+ } finally {
+ display.dispose();
+ }
+ return returnCode;
+ }
+
+ private PrivilegedAction getRunAction(final Display display) {
+ return new PrivilegedAction() {
+
+ public Object run() {
+ int result = PlatformUI.createAndRunWorkbench(display,
+ new SecureWorkbenchAdvisor());
+ return new Integer(result);
+ }
+ };
+ }
+
+ public void stop() {
+ final IWorkbench workbench;
+ try {
+ workbench = PlatformUI.getWorkbench();
+ } catch (Exception e) {
+ return;
+ }
+ if (workbench == null)
+ return;
+ final Display display = workbench.getDisplay();
+ display.syncExec(new Runnable() {
+
+ public void run() {
+ if (!display.isDisposed())
+ workbench.close();
+ }
+ });
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.rcp;
+
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchAdvisor;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class SecureWorkbenchAdvisor extends WorkbenchAdvisor {
+
+ static final String PERSPECTIVE_ID = "org.argeo.security.ui.securityPerspective"; //$NON-NLS-1$
+
+ public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+ return new SecureWorkbenchWindowAdvisor(configurer);
+ }
+
+ public String getInitialWindowPerspectiveId() {
+ return PERSPECTIVE_ID;
+ }
+}
--- /dev/null
+package org.argeo.security.ui.rcp;
+
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.application.ActionBarAdvisor;
+import org.eclipse.ui.application.IActionBarConfigurer;
+import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.application.WorkbenchWindowAdvisor;
+
+public class SecureWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
+
+ public SecureWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
+ super(configurer);
+ }
+
+ public ActionBarAdvisor createActionBarAdvisor(
+ IActionBarConfigurer configurer) {
+ return new SecureActionBarAdvisor(configurer);
+ }
+
+ public void preWindowOpen() {
+ IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
+ configurer.setInitialSize(new Point(800, 600));
+ configurer.setShowCoolBar(false);
+ configurer.setShowMenuBar(true);
+ configurer.setShowStatusLine(true);
+ configurer.setShowPerspectiveBar(true);
+ configurer.setTitle("Argeo Secure UI"); //$NON-NLS-1$
+ }
+
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.security.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+#Sat Jan 15 13:25:02 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
--- /dev/null
+#Sat Jan 15 18:15:48 CET 2011
+eclipse.preferences.version=1
+resolve.requirebundle=false
--- /dev/null
+Manifest-Version: 1.0\r
+Export-Package: org.argeo.security.ui;uses:="org.eclipse.ui,org.eclips\r
+ e.ui.plugin,org.osgi.framework";version="0.2.2.SNAPSHOT-r20110116_215\r
+ 742",org.argeo.security.ui.dialogs;uses:="org.eclipse.swt.events,java\r
+ x.security.auth.callback,org.eclipse.swt.widgets,org.eclipse.jface.op\r
+ eration,org.eclipse.core.runtime,org.eclipse.jface.dialogs,org.eclips\r
+ e.swt.graphics,org.eclipse.swt.layout";version="0.2.2.SNAPSHOT-r20110\r
+ 116_215742",org.argeo.security.ui.views;uses:="org.argeo.security.equ\r
+ inox,org.eclipse.jface.viewers,org.eclipse.swt.graphics,org.eclipse.u\r
+ i,org.eclipse.ui.part,org.eclipse.swt.widgets,org.argeo.security,org.\r
+ argeo";version="0.2.2.SNAPSHOT-r20110116_215742"\r
+Private-Package: .;version="0.2.2-SNAPSHOT-r20110116_215742"\r
+Bundle-ActivationPolicy: lazy\r
+Tool: Bnd-0.0.357\r
+Bundle-Name: Commons Security UI\r
+Created-By: 1.6.0_0 (Sun Microsystems Inc.)\r
+Bundle-RequiredExecutionEnvironment: J2SE-1.5\r
+Require-Bundle: org.eclipse.ui;resolution:=optional,org.eclipse.rap.ui\r
+ ;resolution:=optional,org.eclipse.core.runtime\r
+Bundle-Vendor: Argeo\r
+Bundle-Version: 0.2.2.SNAPSHOT-r20110116_215742\r
+Bundle-Activator: org.argeo.security.ui.SecurityUiPlugin\r
+Bundle-ManifestVersion: 2\r
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt\r
+Import-Package: javax.security.auth.callback,org.argeo;version="0.2",o\r
+ rg.argeo.eclipse.spring;version="0.2",org.argeo.security;version="0.2\r
+ ",org.argeo.security.equinox;version="0.2",org.argeo.security.ui;vers\r
+ ion="0.2",org.argeo.security.ui.dialogs;version="0.2",org.argeo.secur\r
+ ity.ui.views;version="0.2",org.eclipse.core.runtime;registry=split;ve\r
+ rsion="3.4",org.eclipse.jface.dialogs,org.eclipse.jface.operation,org\r
+ .eclipse.jface.viewers,org.eclipse.swt.events,org.eclipse.swt.graphic\r
+ s,org.eclipse.swt.layout,org.eclipse.swt.widgets,org.eclipse.ui;ui.wo\r
+ rkbench=split,org.eclipse.ui.part;ui.workbench=split,org.eclipse.ui.p\r
+ lugin,org.osgi.framework;version="1.5"\r
+Bundle-SymbolicName: org.argeo.security.ui;singleton:=true\r
+Bundle-DocURL: http://www.argeo.org\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<beans:beans xmlns="http://www.springframework.org/schema/osgi"\r
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"\r
+ xmlns:osgi="http://www.springframework.org/schema/osgi"\r
+ xsi:schemaLocation="http://www.springframework.org/schema/osgi \r
+ http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd\r
+ http://www.springframework.org/schema/beans \r
+ http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"\r
+ osgi:default-timeout="30000">\r
+\r
+ <reference id="securityService" interface="org.argeo.security.ArgeoSecurityService" />\r
+</beans:beans>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="org.argeo.security.ui.usersView" class="org.argeo.security.ui.views.UsersView"
+ scope="prototype">
+ <property name="securityService" ref="securityService" />
+ </bean>
+ <bean id="org.argeo.security.ui.currentUserView" class="org.argeo.security.ui.views.CurrentUserView"
+ scope="prototype">
+ </bean>
+</beans>
--- /dev/null
+source.. = src/main/java/
+output.. = target/classes/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.perspectives">
+ <perspective
+ class="org.argeo.security.ui.SecurityPerspective"
+ id="org.argeo.security.ui.securityPerspective"
+ name="Security">
+ </perspective>
+ </extension>
+ <extension
+ point="org.eclipse.ui.views">
+ <view
+ class="org.argeo.eclipse.spring.SpringExtensionFactory"
+ id="org.argeo.security.ui.usersView"
+ name="Users"
+ restorable="false">
+ </view>
+ <view
+ class="org.argeo.eclipse.spring.SpringExtensionFactory"
+ id="org.argeo.security.ui.currentUserView"
+ name="Current User"
+ restorable="false">
+ </view>
+ </extension>
+
+ <!-- Security -->
+ <extension
+ id="defaultLoginDialog"
+ name="Default Login Dialog"
+ point="org.eclipse.equinox.security.callbackHandler">
+ <callbackHandler
+ class="org.argeo.security.ui.dialogs.DefaultLoginDialog">
+ </callbackHandler>
+ </extension>
+ <extension
+ point="org.eclipse.equinox.security.callbackHandlerMapping">
+ <callbackHandlerMapping
+ callbackHandlerId="org.argeo.security.ui.defaultLoginDialog"
+ configName="SPRING">
+ </callbackHandlerMapping>
+ </extension>
+ <extension
+ point="org.eclipse.equinox.security.callbackHandlerMapping">
+ <callbackHandlerMapping
+ callbackHandlerId="org.argeo.security.ui.defaultLoginDialog"
+ configName="UNIX">
+ </callbackHandlerMapping>
+ </extension>
+ <extension
+ point="org.eclipse.equinox.security.callbackHandlerMapping">
+ <callbackHandlerMapping
+ callbackHandlerId="org.argeo.security.ui.defaultLoginDialog"
+ configName="SPRING_SECURITY_CONTEXT">
+ </callbackHandlerMapping>
+ </extension>
+ </plugin>
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.security</groupId>
+ <version>0.2.2-SNAPSHOT</version>
+ <artifactId>plugins</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>org.argeo.security.ui</artifactId>
+ <name>Commons Security UI</name>
+ <packaging>jar</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>${version.maven-bundle-plugin}</version>
+ <configuration>
+ <instructions>
+ <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
+ <Bundle-Activator>org.argeo.security.ui.SecurityUiPlugin</Bundle-Activator>
+ <Require-Bundle>org.eclipse.ui;resolution:=optional,org.eclipse.rap.ui;resolution:=optional,org.eclipse.core.runtime</Require-Bundle>
+ <Import-Package>*,org.argeo.eclipse.spring</Import-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <!-- Argeo Security -->
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.core</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>org.argeo.security.equinox</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Argeo Eclipse -->
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.ui</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Argeo Eclipse distribution (common dependencies for both RAP and RCP) -->
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.common</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- RCP only dependency, needed at compile time -->
+ <dependency>
+ <groupId>org.argeo.commons.eclipse</groupId>
+ <artifactId>org.argeo.eclipse.dep.rcp</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.ui</groupId>
+ <artifactId>org.eclipse.ui</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <!-- Commons -->
+ <dependency>
+ <groupId>org.argeo.commons.basic</groupId>
+ <artifactId>org.argeo.basic.nodeps</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ </dependency>
+
+ <!-- Spring -->
+ <dependency>
+ <groupId>org.springframework.security</groupId>
+ <artifactId>org.springframework.security.core</artifactId>
+ </dependency>
+
+ <!-- Others -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
+ </dependency>
+
+ </dependencies>
+</project>
--- /dev/null
+package org.argeo.security.ui;
+
+import org.eclipse.ui.IFolderLayout;
+import org.eclipse.ui.IPageLayout;
+import org.eclipse.ui.IPerspectiveFactory;
+
+public class SecurityPerspective implements IPerspectiveFactory {
+
+ public void createInitialLayout(IPageLayout layout) {
+ String editorArea = layout.getEditorArea();
+ layout.setEditorAreaVisible(false);
+ layout.setFixed(false);
+
+ IFolderLayout main = layout.createFolder("main", IPageLayout.RIGHT,
+ 0.3f, editorArea);
+ IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT,
+ 0.3f, editorArea);
+
+ left.addView("org.argeo.security.ui.usersView");
+ main.addView("org.argeo.security.ui.currentUserView");
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class SecurityUiPlugin extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.argeo.security.ui"; //$NON-NLS-1$
+
+ // The shared instance
+ private static SecurityUiPlugin plugin;
+
+ /**
+ * The constructor
+ */
+ public SecurityUiPlugin() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static SecurityUiPlugin getDefault() {
+ return plugin;
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.dialogs;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.operation.ModalContext;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+public abstract class AbstractLoginDialog extends TitleAreaDialog implements
+ CallbackHandler {
+
+ boolean processCallbacks = false;
+ boolean isCancelled = false;
+ Callback[] callbackArray;
+
+ protected final Callback[] getCallbacks() {
+ return this.callbackArray;
+ }
+
+ public abstract void internalHandle();
+
+ public boolean isCancelled() {
+ return isCancelled;
+ }
+
+ protected AbstractLoginDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * javax.security.auth.callback.CallbackHandler#handle(javax.security.auth
+ * .callback.Callback[])
+ */
+ public void handle(final Callback[] callbacks) throws IOException {
+ this.callbackArray = callbacks;
+ final Display display = Display.getDefault();
+ display.syncExec(new Runnable() {
+
+ public void run() {
+ isCancelled = false;
+ setBlockOnOpen(false);
+ open();
+ final Button okButton = getButton(IDialogConstants.OK_ID);
+ okButton.setText("Login");
+ okButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(final SelectionEvent event) {
+ processCallbacks = true;
+ }
+
+ public void widgetDefaultSelected(final SelectionEvent event) {
+ // nothing to do
+ }
+ });
+ final Button cancel = getButton(IDialogConstants.CANCEL_ID);
+ cancel.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(final SelectionEvent event) {
+ isCancelled = true;
+ processCallbacks = true;
+ }
+
+ public void widgetDefaultSelected(final SelectionEvent event) {
+ // nothing to do
+ }
+ });
+ }
+ });
+ try {
+ ModalContext.setAllowReadAndDispatch(true); // Works for now.
+ ModalContext.run(new IRunnableWithProgress() {
+
+ public void run(final IProgressMonitor monitor) {
+ // Wait here until OK or cancel is pressed, then let it rip.
+ // The event
+ // listener
+ // is responsible for closing the dialog (in the
+ // loginSucceeded
+ // event).
+ while (!processCallbacks) {
+ try {
+ Thread.sleep(100);
+ } catch (final Exception e) {
+ // do nothing
+ }
+ }
+ processCallbacks = false;
+ // Call the adapter to handle the callbacks
+ if (!isCancelled())
+ internalHandle();
+ }
+ }, true, new NullProgressMonitor(), Display.getDefault());
+ } catch (final Exception e) {
+ final IOException ioe = new IOException();
+ ioe.initCause(e);
+ throw ioe;
+ }
+ }
+
+ protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ shell.setText("Login");
+ }
+}
--- /dev/null
+package org.argeo.security.ui.dialogs;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.TextOutputCallback;
+
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+public class DefaultLoginDialog extends AbstractLoginDialog {
+
+ public DefaultLoginDialog() {
+ this(Display.getDefault().getActiveShell());
+ }
+
+ protected DefaultLoginDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ protected Point getInitialSize() {
+ return new Point(300, 280);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite dialogarea = (Composite) super.createDialogArea(parent);
+ dialogarea.setLayoutData(new GridData(GridData.FILL_BOTH));
+ Composite composite = new Composite(dialogarea, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+ createCallbackHandlers(composite);
+ return composite;
+ }
+
+ private void createCallbackHandlers(Composite composite) {
+ Callback[] callbacks = getCallbacks();
+ for (int i = 0; i < callbacks.length; i++) {
+ Callback callback = callbacks[i];
+ if (callback instanceof TextOutputCallback) {
+ createTextoutputHandler(composite,
+ (TextOutputCallback) callback);
+ } else if (callback instanceof NameCallback) {
+ createNameHandler(composite, (NameCallback) callback);
+ } else if (callback instanceof PasswordCallback) {
+ createPasswordHandler(composite, (PasswordCallback) callback);
+ }
+ }
+ }
+
+ private void createPasswordHandler(Composite composite,
+ final PasswordCallback callback) {
+ Label label = new Label(composite, SWT.NONE);
+ label.setText(callback.getPrompt());
+ final Text passwordText = new Text(composite, SWT.SINGLE | SWT.LEAD
+ | SWT.PASSWORD | SWT.BORDER);
+ //passwordText.setLayoutData(new GridData(GridData.FILL_BOTH));
+ passwordText.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent event) {
+ callback.setPassword(passwordText.getText().toCharArray());
+ }
+ });
+ }
+
+ private void createNameHandler(Composite composite,
+ final NameCallback callback) {
+ Label label = new Label(composite, SWT.NONE);
+ label.setText(callback.getPrompt());
+ final Text text = new Text(composite, SWT.SINGLE | SWT.LEAD
+ | SWT.BORDER);
+ //text.setLayoutData(new GridData(GridData.FILL_BOTH));
+ text.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent event) {
+ callback.setName(text.getText());
+ }
+ });
+ }
+
+ private void createTextoutputHandler(Composite composite,
+ TextOutputCallback callback) {
+ int messageType = callback.getMessageType();
+ int dialogMessageType = IMessageProvider.NONE;
+ switch (messageType) {
+ case TextOutputCallback.INFORMATION:
+ dialogMessageType = IMessageProvider.INFORMATION;
+ break;
+ case TextOutputCallback.WARNING:
+ dialogMessageType = IMessageProvider.WARNING;
+ break;
+ case TextOutputCallback.ERROR:
+ dialogMessageType = IMessageProvider.ERROR;
+ break;
+ }
+ setMessage(callback.getMessage(), dialogMessageType);
+ }
+
+ public void internalHandle() {
+ }
+}
--- /dev/null
+package org.argeo.security.ui.views;
+
+import org.argeo.security.equinox.CurrentUser;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.part.ViewPart;
+
+public class CurrentUserView extends ViewPart {
+ private TableViewer viewer;
+
+ @Override
+ public void createPartControl(Composite parent) {
+
+ // viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
+ // | SWT.V_SCROLL);
+ viewer = new TableViewer(createTable(parent));
+ viewer.setContentProvider(new UsersContentProvider());
+ viewer.setLabelProvider(new UsersLabelProvider());
+ viewer.setInput(getViewSite());
+ // viewer.setInput(SecurityContextHolder.getContext());
+ }
+
+ protected Table createTable(Composite parent) {
+ int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
+
+ Table table = new Table(parent, style);
+
+ // GridData gridData = new GridData(GridData.FILL_BOTH);
+ // gridData.grabExcessVerticalSpace = true;
+ // gridData.grabExcessHorizontalSpace = true;
+ // gridData.horizontalSpan = 3;
+ // table.setLayoutData(gridData);
+
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ TableColumn column = new TableColumn(table, SWT.LEFT, 0);
+ column.setText("ID");
+ column.setWidth(100);
+
+// column = new TableColumn(table, SWT.LEFT, 1);
+// column.setText("Password");
+// column.setWidth(200);
+
+ // column = new TableColumn(table, SWT.LEFT, 2);
+ // column.setText("Roles");
+ // column.setWidth(300);
+
+ return table;
+ }
+
+ @Override
+ public void setFocus() {
+ viewer.getTable().setFocus();
+ }
+
+ private class UsersContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public Object[] getChildren(Object parentElement) {
+// ILoginContext secureContext = LoginContextFactory
+// .createContext("SPRING");
+// try {
+// secureContext.login();
+// } catch (LoginException e) {
+// // login failed
+// }
+//
+// Subject subject = null;
+// // subject = Subject.getSubject(AccessController.getContext());
+// try {
+// subject = secureContext.getSubject();
+// } catch (Exception e) {
+// e.printStackTrace();
+// throw new ArgeoException("Cannot retrieve subject", e);
+// }
+//
+// if (subject == null)
+// throw new ArgeoException("No subject found");
+// return subject.getPrincipals().toArray();
+ return CurrentUser.roles().toArray();
+ }
+
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
+ private class UsersLabelProvider extends LabelProvider implements
+ ITableLabelProvider {
+ public String getColumnText(Object element, int columnIndex) {
+// Principal argeoUser = (Principal) element;
+// switch (columnIndex) {
+// case 0:
+// return argeoUser.getName();
+// case 1:
+// return argeoUser.toString();
+// default:
+// throw new ArgeoException("Unmanaged column " + columnIndex);
+// }
+ return element.toString();
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ }
+
+}
--- /dev/null
+package org.argeo.security.ui.views;
+
+import org.argeo.ArgeoException;
+import org.argeo.security.ArgeoSecurityService;
+import org.argeo.security.ArgeoUser;
+import org.argeo.security.equinox.CurrentUser;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.part.ViewPart;
+
+public class UsersView extends ViewPart {
+ private TableViewer viewer;
+ private ArgeoSecurityService securityService;
+
+ @Override
+ public void createPartControl(Composite parent) {
+
+ // viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
+ // | SWT.V_SCROLL);
+ viewer = new TableViewer(createTable(parent));
+ viewer.setContentProvider(new UsersContentProvider());
+ viewer.setLabelProvider(new UsersLabelProvider());
+ viewer.setInput(getViewSite());
+ // viewer.setInput(SecurityContextHolder.getContext());
+ }
+
+ protected Table createTable(Composite parent) {
+ int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL;
+
+ Table table = new Table(parent, style);
+
+ // GridData gridData = new GridData(GridData.FILL_BOTH);
+ // gridData.grabExcessVerticalSpace = true;
+ // gridData.grabExcessHorizontalSpace = true;
+ // gridData.horizontalSpan = 3;
+ // table.setLayoutData(gridData);
+
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ TableColumn column = new TableColumn(table, SWT.LEFT, 0);
+ column.setText("ID");
+ column.setWidth(100);
+
+ column = new TableColumn(table, SWT.LEFT, 1);
+ column.setText("Password");
+ column.setWidth(200);
+
+ // column = new TableColumn(table, SWT.LEFT, 2);
+ // column.setText("Roles");
+ // column.setWidth(300);
+
+ return table;
+ }
+
+ @Override
+ public void setFocus() {
+ viewer.getTable().setFocus();
+ }
+
+ private class UsersContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public Object[] getChildren(Object parentElement) {
+// try {
+// Thread.sleep(3000);
+// } catch (InterruptedException e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+
+ return securityService.getSecurityDao().listUsers().toArray();
+ }
+
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
+ private class UsersLabelProvider extends LabelProvider implements
+ ITableLabelProvider {
+ public String getColumnText(Object element, int columnIndex) {
+ String currentUsername = CurrentUser.getUsername();
+ ArgeoUser argeoUser = (ArgeoUser) element;
+ switch (columnIndex) {
+ case 0:
+ String userName = argeoUser.getUsername();
+ if (userName.equals(currentUsername))
+ userName = userName + "*";
+ return userName;
+ case 1:
+ return argeoUser.getPassword();
+ case 2:
+ return argeoUser.getRoles().toString();
+ default:
+ throw new ArgeoException("Unmanaged column " + columnIndex);
+ }
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ }
+
+ public void setSecurityService(ArgeoSecurityService securityService) {
+ this.securityService = securityService;
+ }
+
+}
--- /dev/null
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons.security</groupId>
+ <version>0.2.2-SNAPSHOT</version>
+ <artifactId>eclipse</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <artifactId>plugins</artifactId>
+ <name>Commons Security Eclipse plugins</name>
+ <packaging>pom</packaging>
+ <modules>
+ <module>org.argeo.security.equinox</module>
+ <module>org.argeo.security.ui</module>
+ <module>org.argeo.security.ui.rcp</module>
+ <module>org.argeo.security.ui.rap</module>
+ </modules>
+ <build>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>plugin.xml</include>
+ <include>META-INF/**</include>
+ <include>jaas/**</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>META-INF</directory>
+ <includes>
+ <include>MANIFEST.MF</include>
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <manifestLocation>META-INF</manifestLocation>
+ <instructions>
+ <Bundle-SymbolicName>${pom.artifactId};singleton:=true</Bundle-SymbolicName>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.argeo.commons.osgi</groupId>
+ <artifactId>org.argeo.osgi.boot</artifactId>
+ <version>0.2.2-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.commons</groupId>
+ <version>0.2.2-SNAPSHOT</version>
+ <artifactId>argeo-commons</artifactId>
+ <relativePath>..</relativePath>
+ </parent>
+ <groupId>org.argeo.commons.security</groupId>
+ <artifactId>eclipse</artifactId>
+ <name>Commons Security Eclipse</name>
+ <packaging>pom</packaging>
+ <modules>
+ <!-- <module>features</module> -->
+ <module>plugins</module>
+ </modules>
+</project>
\ No newline at end of file
<modules>
<module>runtime</module>
<module>modules</module>
+ <module>eclipse</module>
<module>dep</module>
<module>demo</module>
</modules>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.argeo.server.ads.server</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ </natures>
+</projectDescription>
--- /dev/null
+#Sun Jan 16 09:58:38 CET 2011
+eclipse.preferences.version=1
+pluginProject.extensions=false
+resolve.requirebundle=false
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
- <property name="ignoreUnresolvablePlaceholders" value="false" />
<property name="locations">
- <value>osgibundle:ads.properties
- </value>
+ <value>osgibundle:ads.properties</value>
</property>
</bean>
<bean class="org.argeo.server.ads.AdsContainer">
- <property name="workingDirectory" value="${argeo.osgi.data.dir}/apacheds" />
+ <property name="workingDirectory" value="${osgi.instance.area}/apacheds" />
<property name="deleteWorkingDirOnExit" value="true" />
<property name="configuration" ref="configuration" />
<property name="environment" ref="environment" />
<prop key="java.naming.security.authentication">simple</prop>
<prop key="java.naming.security.principal">${argeo.ldap.manager.userdn}</prop>
<prop key="java.naming.security.credentials">${argeo.ldap.manager.password}</prop>
- <!--<prop key="kdc.entryBaseDn">ou=users,dc=example,dc=com</prop>-->
- <!--<prop key="kdc.java.naming.security.credentials">secret</prop>-->
- <!--
- <prop key="changepw.entryBaseDn">ou=users,dc=example,dc=com</prop>
- -->
- <!--
- <prop key="changepw.java.naming.security.credentials">secret</prop>
- -->
- <!--
- Set this key to a space delimited set of attributeType descriptions
- and their OID's if you want an attributeType to be handled as
- binary content. The server will use the schema to derive the set of
- attributeTypes to treat as binary. The union if the values you
- provide here will be taken as the set of binaries. Note to be
- consistent you must add both the OID and all the names an
- attributeType can have.
- -->
- <!--
- <prop key="java.naming.ldap.attributes.binary"></prop>
- -->
+ <!--<prop key="kdc.entryBaseDn">ou=users,dc=example,dc=com</prop> -->
+ <!--<prop key="kdc.java.naming.security.credentials">secret</prop> -->
+ <!-- <prop key="changepw.entryBaseDn">ou=users,dc=example,dc=com</prop> -->
+ <!-- <prop key="changepw.java.naming.security.credentials">secret</prop> -->
+ <!-- Set this key to a space delimited set of attributeType descriptions
+ and their OID's if you want an attributeType to be handled as binary content.
+ The server will use the schema to derive the set of attributeTypes to treat
+ as binary. The union if the values you provide here will be taken as the
+ set of binaries. Note to be consistent you must add both the OID and all
+ the names an attributeType can have. -->
+ <!-- <prop key="java.naming.ldap.attributes.binary"></prop> -->
</props>
</property>
</bean>
--- /dev/null
+bin.includes = META-INF/
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.argeo.commons.server</groupId>
<groupId>javax.servlet</groupId>
<artifactId>com.springsource.javax.servlet</artifactId>
</dependency>
+ <dependency>
+ <groupId>javax.xml.stream</groupId>
+ <artifactId>com.springsource.javax.xml.stream</artifactId>
+ </dependency>
<!-- Logging -->
<dependency>
com.springsource.org.apache.lucene,\
org.springframework.context
source.. = src/main/java/,\
- src/test/java/,\
- src/test/resources/,\
src/main/resources/