Hi JB,

Sorry mate, I just realised I built that patch from the console2
directory... :oP

The attached one is from the base directory of Kalumet

Cheers -- Randall

P.S - how was the holiday?


On Sun, Feb 1, 2015 at 3:57 PM, Jean-Baptiste Onofré <[email protected]>
wrote:

> Hi Randall,
>
> thanks for the update. I will take a look later today and keep you posted.
>
> Regards
> JB
> --
> Jean-Baptiste Onofré
> [email protected]
> http://blog.nanthrax.net
> Talend - http://www.talend.com
>
Index: kalumet-modules/common/src/main/java/org/apache/kalumet/model/User.java
===================================================================
--- kalumet-modules/common/src/main/java/org/apache/kalumet/model/User.java	(revision 1652561)
+++ kalumet-modules/common/src/main/java/org/apache/kalumet/model/User.java	(working copy)
@@ -23,6 +23,7 @@
 import org.apache.xerces.dom.ElementImpl;
 import org.w3c.dom.Element;
 
+import javax.xml.bind.annotation.XmlRootElement;
 import java.io.Serializable;
 import java.security.MessageDigest;
 
Index: kalumet-modules/console/src/main/resources/org/apache/kalumet/console/app/locales/Messages.properties
===================================================================
--- kalumet-modules/console/src/main/resources/org/apache/kalumet/console/app/locales/Messages.properties	(revision 1652561)
+++ kalumet-modules/console/src/main/resources/org/apache/kalumet/console/app/locales/Messages.properties	(working copy)
@@ -42,6 +42,7 @@
 applicationserver										  JEE Application Server
 applicationserver.add									  Add JEE Application Server
 applicationserver.notfound								  JEE Application Server not found.
+applicationserver.select								  Select a JEE Application Server
 applicationserver.startup								  Startup command
 applicationserver.shutdown							      Shutdown command
 apply													  Apply
Index: kalumet-modules/console2/pom.xml
===================================================================
--- kalumet-modules/console2/pom.xml	(revision 0)
+++ kalumet-modules/console2/pom.xml	(working copy)
@@ -0,0 +1,208 @@
+<?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/xsd/maven-4.0.0.xsd";>
+
+    <!--
+
+        Licensed to the Apache Software Foundation (ASF) under one or more
+        contributor license agreements.  See the NOTICE file distributed with
+        this work for additional information regarding copyright ownership.
+        The ASF licenses this file to You under the Apache License, Version 2.0
+        (the "License"); you may not use this file except in compliance with
+        the License.  You may obtain a copy of the License at
+
+           http://www.apache.org/licenses/LICENSE-2.0
+
+        Unless required by applicable law or agreed to in writing, software
+        distributed under the License is distributed on an "AS IS" BASIS,
+        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+        See the License for the specific language governing permissions and
+        limitations under the License.
+    -->
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.kalumet</groupId>
+        <artifactId>kalumet-modules</artifactId>
+        <version>0.7-incubating-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <properties>
+        <powermock.version>1.5.5</powermock.version>
+    </properties>
+
+    <artifactId>org.apache.kalumet.console2</artifactId>
+    <packaging>war</packaging>
+    <name>Apache Kalumet :: Console2</name>
+
+    <dependencies>
+        <!-- Kalumet dependencies -->
+        <dependency>
+            <groupId>org.apache.kalumet</groupId>
+            <artifactId>org.apache.kalumet.common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.kalumet</groupId>
+            <artifactId>org.apache.kalumet.utils</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-collections</groupId>
+            <artifactId>commons-collections</artifactId>
+        </dependency>
+
+        <!-- Logging -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-log4j12</artifactId>
+        </dependency>
+
+        <!-- Servlet Def -->
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- Unit testing -->
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- Jersey -->
+       <dependency>
+            <groupId>org.glassfish.jersey.containers</groupId>
+            <artifactId>jersey-container-servlet</artifactId>
+            <version>2.15</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.media</groupId>
+            <artifactId>jersey-media-moxy</artifactId>
+            <version>2.15</version>
+        </dependency>
+        <dependency>
+            <groupId>com.owlike</groupId>
+            <artifactId>genson</artifactId>
+            <version>1.2</version>
+        </dependency>
+
+        <!-- Jersey Test -->
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
+            <version>2.15</version>
+        </dependency>
+        <!--<dependency>-->
+            <!--<groupId>org.glassfish.jersey.test-framework.providers</groupId>-->
+            <!--<artifactId>jersey-test-framework-provider-inmemory</artifactId>-->
+            <!--<version>2.15</version>-->
+        <!--</dependency>-->
+
+        <!-- Mocking -->
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>${powermock.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito</artifactId>
+            <version>${powermock.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <!--<plugin>-->
+                <!--<groupId>org.apache.maven.plugins</groupId>-->
+                <!--<artifactId>maven-surefire-plugin</artifactId>-->
+                <!--<version>2.14.1</version>-->
+                <!--<configuration>-->
+                    <!--<includes>-->
+                        <!--<include>**/*Tests.java</include>-->
+                    <!--</includes>-->
+                <!--</configuration>-->
+            <!--</plugin>-->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.16</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <configuration>
+                    <warName>apache-kalumet2</warName>
+                    <archive>
+                        <manifest>
+                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+                        </manifest>
+                    </archive>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>maven-jetty-plugin</artifactId>
+                <version>6.1.12</version>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.tomcat.maven</groupId>
+                <artifactId>tomcat7-maven-plugin</artifactId>
+                <configuration>
+                    <port>8181</port>
+                    <path>/apache-kalumet-console</path>
+                    <systemProperties>
+                        <java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
+                        <kalumet.home>${project.build.directory}</kalumet.home>
+                    </systemProperties>
+                </configuration>
+                <dependencies>
+
+                </dependencies>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <!-- profile for dev an log output in the console -->
+            <id>dev</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-antrun-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>override-log4j-with-console-output</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>run</goal>
+                                </goals>
+                                <configuration>
+                                    <tasks>
+                                        <copy overwrite="true" file="${basedir}/src/test/tomcat/log4j.xml"
+                                              todir="${project.build.outputDirectory}"/>
+                                    </tasks>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>
\ No newline at end of file
Index: kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/KalumetApplication.java
===================================================================
--- kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/KalumetApplication.java	(revision 0)
+++ kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/KalumetApplication.java	(working copy)
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2;
+
+import jersey.repackaged.com.google.common.collect.Sets;
+import org.apache.kalumet.console2.api.AuthorizationFilter;
+import org.apache.kalumet.console2.api.ConfigurationManager;
+import org.glassfish.hk2.utilities.binding.AbstractBinder;
+import org.glassfish.jersey.server.ResourceConfig;
+
+import java.util.Set;
+
+/**
+ * This class is used to configure Jersey for the Kalumet REST API
+ *
+ * @author rdietz
+ */
+public class KalumetApplication extends ResourceConfig
+{
+    public KalumetApplication()
+    {
+        // define the classes to be scanned by Jersey
+        packages("org.apache.kalumet.console2.api");
+
+        // Bind the Configuration Manager to be a singleton
+        register(new AbstractBinder()
+        {
+            @Override
+            protected void configure() {
+                bind(new ConfigurationManager()).to(ConfigurationManager.class);
+            }
+        });
+
+        // TODO Register the security filter
+        register(AuthorizationFilter.class);
+    }
+
+    public KalumetApplication(Set<Class<?>> classes) {
+        this();
+        this.registerClasses((Set)classes);
+    }
+
+    public KalumetApplication(Class<?>... classes) {
+        this((Set) Sets.newHashSet(classes));
+    }
+}
Index: kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/AuthorizationFilter.java
===================================================================
--- kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/AuthorizationFilter.java	(revision 0)
+++ kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/AuthorizationFilter.java	(working copy)
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2.api;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerRequestFilter;
+import java.io.IOException;
+
+/**
+ * This filter validates user access to the REST API
+ *
+ * @author rdietz
+ */
+public class AuthorizationFilter implements ContainerRequestFilter
+{
+    public void filter(ContainerRequestContext requestContext)
+            throws IOException
+    {
+        // TODO Implement the Authorisation filter
+//        if (user.notLoggedIn())
+//        {
+//            throw new WebApplicationException(
+//                    Response.status(Response.Status.UNAUTHORIZED)
+//                            .header(HttpHeaders.WWW_AUTHENTICATE, "Basic realm=\"realm\"")
+//                            .entity("Page requires login.").build()
+//            );
+//        }
+   }
+}
Index: kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/ConfigurationManager.java
===================================================================
--- kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/ConfigurationManager.java	(revision 0)
+++ kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/ConfigurationManager.java	(working copy)
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2.api;
+
+import org.apache.kalumet.console2.config.model.KalumetConsole;
+import org.apache.kalumet.console2.config.model.Property;
+import org.apache.kalumet.model.Kalumet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.inject.Singleton;
+import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Load and manipulate the Kalumet configuration store.
+ */
+//@Service
+@Singleton
+public class ConfigurationManager
+{
+    private final static transient Logger LOGGER = LoggerFactory.getLogger( ConfigurationManager.class );
+
+    private final static String KALUMET_CONSOLE_CONFIGURATION_FILE = "/kalumet-console-config.xml";
+
+    private final static String ENVIRONMENT_JOURNAL_FILE_EXTENSION = ".log";
+
+    private static KalumetConsole KALUMET_CONSOLE_CACHE = null;
+
+    private static Kalumet KALUMET_CACHE = null;
+
+    private static int KALUMET_CACHE_TIMEOUT_MINUTES = 5;
+
+    private static Date KALUMET_CACHE_EXPIRY_TIME = null;
+
+    /**
+     * Load the Kalumet Console configuration.
+     *
+     * @return the Kalumet configuration object.
+     */
+    public static KalumetConsole loadConfiguration()
+        throws Exception
+    {
+        if ( KALUMET_CONSOLE_CACHE == null )
+        {
+            LOGGER.debug( "Loading Apache Kalumet console configuration from {}", KALUMET_CONSOLE_CONFIGURATION_FILE );
+            String configurationFile = null;
+            try
+            {
+                configurationFile = ConfigurationManager.class.getResource(
+                    ConfigurationManager.KALUMET_CONSOLE_CONFIGURATION_FILE ).toString();
+            }
+            catch ( NullPointerException nullPointerException )
+            {
+                LOGGER.error( "Apache Kalumet configuration file is not found in the server classpath" );
+                throw new IllegalStateException(
+                    "Apache Kalumet configuration file is not found in the server classpath" );
+            }
+            KALUMET_CONSOLE_CACHE = KalumetConsole.digeste( configurationFile );
+        }
+
+        return KALUMET_CONSOLE_CACHE;
+    }
+
+    /**
+     * Get the Kalumet XML configuration location.
+     *
+     * @return the Kalumet XML configuration location.
+     */
+    public String getStoreFile()
+        throws Exception
+    {
+        KalumetConsole kalumetConsole = ConfigurationManager.loadConfiguration();
+        Property kalumetConsoleProperty = kalumetConsole.getProperty( "ConfigurationLocation" );
+        if ( kalumetConsoleProperty == null )
+        {
+            throw new IllegalStateException(
+                "The property ConfigurationLocation is not found in the Apache Kalumet Console configuration. This property is required to use Apache Kalumet Console and must contains the location (file: or http:) to the Kalumet configuration store" );
+        }
+        if ( System.getProperty( "kalumet.home" ) != null )
+        {
+            return System.getProperty( "kalumet.home" ) + "/" + kalumetConsoleProperty.getValue();
+        }
+        return kalumetConsoleProperty.getValue();
+    }
+
+    /**
+     * Load the Kalumet configuration.
+     *
+     * @return the Kalumet configuration object.
+     */
+    public Kalumet loadStore()
+        throws Exception
+    {
+        // if NOW is after the cache expiry
+        if ( KALUMET_CACHE == null || Calendar.getInstance().getTime().after(KALUMET_CACHE_EXPIRY_TIME))
+        {
+            String kalumetConfigurationPath = getStoreFile();
+            File kalumetConfigurationFile = new File( kalumetConfigurationPath );
+            if ( !kalumetConfigurationFile.exists() )
+            {
+                kalumetConfigurationFile.createNewFile();
+                // init with a default file
+                Kalumet.writeDefault( kalumetConfigurationPath );
+            }
+            KALUMET_CACHE = Kalumet.digeste( kalumetConfigurationPath );
+            // update the deprecation date
+            Calendar timeout = Calendar.getInstance();
+            timeout.set( Calendar.MINUTE, timeout.get( Calendar.MINUTE ) + KALUMET_CACHE_TIMEOUT_MINUTES );
+            KALUMET_CACHE_EXPIRY_TIME = timeout.getTime();
+        }
+        return KALUMET_CACHE;
+    }
+
+    /**
+     * Read the Kalumet configuration store and return the XML raw content.
+     *
+     * @return the Kalumet XML raw content.
+     */
+//    public final static String readStore()
+//        throws Exception
+//    {
+//        String content = null;
+//        return FileUtils.readFileToString( new File( ConfigurationManager.getStoreFile() ), "ISO-8859-1" );
+//    }
+
+    /**
+     * Write the Kalumet configuration.
+     *
+     * @param kalumet the Kalumet configuration object to store.
+     */
+//    public final static void writeStore( Kalumet kalumet )
+//        throws Exception
+//    {
+//        // get the kalumet configuration store location
+//        String kalumetConfigurationLocation = ConfigurationManager.getStoreFile();
+//        // write the file
+//        kalumet.writeXMLFile( kalumetConfigurationLocation );
+//        // update the cache
+//        KALUMET_CACHE = kalumet;
+//        // update the deprecation date
+//        Calendar timeout = Calendar.getInstance();
+//        timeout.set( Calendar.MINUTE, timeout.get( Calendar.MINUTE ) + KALUMET_CACHE_TIMEOUT_MINUTES );
+//        KALUMET_CACHE_EXPIRY_TIME = timeout.getTime();
+//    }
+
+    /**
+     * Get the Environment Journal location.
+     *
+     * @param environment the Environment name.
+     * @return the Environment Journal location.
+     */
+//    public final static String getEnvironmentJournalFile( String environment )
+//        throws Exception
+//    {
+//        KalumetConsole kalumetConsole = ConfigurationManager.loadConfiguration();
+//        Property kalumetConsoleProperty = kalumetConsole.getProperty( "JournalsLocation" );
+//        if ( kalumetConsoleProperty == null )
+//        {
+//            throw new IllegalArgumentException(
+//                "The property JournalsLocation is not found in the Apache Kalumet Console configuration. This property is required to store the environment journals and must contain the directory path for the journal files." );
+//        }
+//        String journalPath;
+//        if ( System.getProperty( "kalumet.home" ) != null )
+//        {
+//            journalPath =
+//                System.getProperty( "kalumet.home" ) + "/" + kalumetConsoleProperty.getValue() + "/" + environment
+//                    + ConfigurationManager.ENVIRONMENT_JOURNAL_FILE_EXTENSION;
+//        }
+//        else
+//        {
+//            journalPath = kalumetConsoleProperty.getValue() + "/" + environment
+//                + ConfigurationManager.ENVIRONMENT_JOURNAL_FILE_EXTENSION;
+//        }
+//
+//        File journalDir = new File( journalPath );
+//        journalDir.getParentFile().mkdirs();
+//        return journalPath;
+//    }
+
+    /**
+     * Read the environment journal.
+     *
+     * @param environment the <code>Environment</code> name.
+     * @return the environment journal object.
+     */
+//    public final static Journal loadEnvironmentJournal( String environment )
+//        throws Exception
+//    {
+//        KalumetConsole kalumetConsole = ConfigurationManager.loadConfiguration();
+//        String journalPath = ConfigurationManager.getEnvironmentJournalFile( environment );
+//        Journal journal = null;
+//        return Journal.digeste( journalPath );
+//    }
+
+}
Index: kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/UserApiService.java
===================================================================
--- kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/UserApiService.java	(revision 0)
+++ kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/api/UserApiService.java	(working copy)
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2.api;
+
+import org.apache.kalumet.model.Kalumet;
+import org.apache.kalumet.model.ModelObjectAlreadyExistsException;
+import org.apache.kalumet.model.User;
+
+import javax.inject.Inject;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+/**
+ * This class delivers the API functionality for managing console Users
+ *
+ * @author rdietz
+ */
+@Path("users")
+public class UserApiService
+{
+    private Kalumet kalumet = null;
+
+    /**
+     * This constructor injects the ConfigurationManager class, which is running as
+     * a Singleton within the Kalumet API
+     */
+    @Inject
+    public UserApiService(ConfigurationManager mgr)
+    {
+        try
+        {
+            kalumet = mgr.loadStore();
+        }
+        catch (Exception e)
+        {
+            // TODO Add appropriate error handling
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * GET the list of Kalumet console users
+     */
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List getAllUsers()
+    {
+        return getUsers();
+    }
+
+    /**
+     * GET a specific Kalumet console user by their user.id
+     */
+    @GET
+    @Path("{userId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    public User getUserById(@PathParam("userId") String userId)
+            throws WebApplicationException
+    {
+        User user = findUser(userId);
+        if (user == null)
+        {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+        return user;
+    }
+
+    /**
+     * CREATE a new user
+     */
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public User create(User user)
+            throws WebApplicationException
+    {
+        if (findUser(user.getId()) != null)
+        {
+            throw new WebApplicationException(Response.Status.BAD_REQUEST);
+        }
+        // TODO Add code to add a new user
+        try
+        {
+            kalumet.getSecurity().addUser(user);
+        }
+        catch (ModelObjectAlreadyExistsException e)
+        {
+            // TODO add exception processing to addUser
+            e.printStackTrace();
+            return null;
+        }
+        return user;
+    }
+
+    /**
+     * UPDATE a specific user
+     */
+    @PUT
+    @Path("{userId}")
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.APPLICATION_JSON)
+    public User update(@PathParam("userId") String userId, User user)
+            throws WebApplicationException
+    {
+        List<User> users = getUsers();
+        int idx = -1;
+        for (int i=0; i < users.size(); i++)
+        {
+            if ((users.get(i)).getId().equals(userId))
+            {
+                idx = i;
+                break;
+            }
+        }
+        if (idx < 0)
+        {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+        users.set(idx, user);
+        return user;
+    }
+
+
+    /**
+     * DELETE a specific user
+     */
+    @DELETE
+    @Path("{userId}")
+    @Produces(MediaType.APPLICATION_JSON)
+    public void remove(@PathParam("userId") String userId)
+            throws WebApplicationException
+    {
+        User currentUser = findUser(userId);
+        if (currentUser == null)
+        {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+        kalumet.getSecurity().getUsers().remove(currentUser);
+    }
+
+    /**
+     * Helper method to get the list of users currently configured in the console
+     *
+     * @return list of <code>User</code> objects
+     */
+    private List<User> getUsers()
+    {
+        return kalumet.getSecurity().getUsers();
+    }
+
+    /**
+     * Helper method to search the console users to find a specific User
+     *
+     * @param userId The user id to search for
+     * @return <code>User</code> object (or null if not found)
+     */
+    private User findUser(String userId)
+    {
+        for (User current : getUsers())
+        {
+            if (current.getId().equals(userId))
+            {
+                return current;
+            }
+        }
+        return null;
+    }
+}
Index: kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/config/model/KalumetConsole.java
===================================================================
--- kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/config/model/KalumetConsole.java	(revision 0)
+++ kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/config/model/KalumetConsole.java	(working copy)
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2.config.model;
+
+import org.apache.commons.digester.Digester;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Represents the <code>kalumet-console</code> root tag of the
+ * Kalumet Console configuration.
+ */
+public class KalumetConsole
+{
+
+    private LinkedList properties;
+
+    public KalumetConsole()
+    {
+        this.properties = new LinkedList();
+    }
+
+    /**
+     * Add a new property.
+     *
+     * @param property the <code>Property</code> to add.
+     */
+    public void addProperty( Property property )
+        throws Exception
+    {
+        if ( this.getProperty( property.getName() ) != null )
+        {
+            throw new IllegalArgumentException(
+                "The property name " + property.getName() + " already exists in the console configuration" );
+        }
+        this.properties.add( property );
+    }
+
+    /**
+     * Return the property list.
+     *
+     * @return the <code>Property</code> list.
+     */
+    public List getProperties()
+    {
+        return this.properties;
+    }
+
+    /**
+     * Return the property identified by a given name.
+     *
+     * @param name the property name.
+     * @return the <code>Property</code> found or null if no <code>Property</code> found.
+     */
+    public Property getProperty( String name )
+    {
+        for ( Iterator propertyIterator = this.getProperties().iterator(); propertyIterator.hasNext(); )
+        {
+            Property property = (Property) propertyIterator.next();
+            if ( property.getName().equals( name ) )
+            {
+                return property;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Digest the Kalumet Console configuration.
+     *
+     * @param path the Kalumet Console location.
+     * @return the Kalumet Console configuration object.
+     */
+    public static KalumetConsole digeste( String path )
+        throws Exception
+    {
+        KalumetConsole kalumetConsole = null;
+        try
+        {
+            Digester digester = new Digester();
+            digester.setValidating( false );
+            digester.addObjectCreate( "kalumet-console",
+                                      "org.apache.kalumet.console2.config.model.KalumetConsole" );
+
+            digester.addObjectCreate( "kalumet-console/property",
+                                      "org.apache.kalumet.console2.config.model.Property" );
+            digester.addSetProperties( "kalumet-console/property" );
+
+            digester.addSetNext( "kalumet-console/property", "addProperty",
+                                 "org.apache.kalumet.console2.config.model.Property" );
+
+            kalumetConsole = (KalumetConsole) digester.parse( path );
+        }
+        catch ( Exception e )
+        {
+            IOException ioe = new IOException( "Can't read the Apache Kalumet console configuration" );
+            ioe.initCause( e );
+            throw ioe;
+        }
+        return kalumetConsole;
+    }
+
+}
Index: kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/config/model/Property.java
===================================================================
--- kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/config/model/Property.java	(revision 0)
+++ kalumet-modules/console2/src/main/java/org/apache/kalumet/console2/config/model/Property.java	(working copy)
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2.config.model;
+
+/**
+ * Represents the <code>property</code> tag in the kalumet-console-config.xml
+ * configuration file.
+ */
+public class Property
+{
+
+    private String name;
+
+    private String value;
+
+    public Property()
+    {
+    }
+
+    public String getName()
+    {
+        return this.name;
+    }
+
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+
+    public String getValue()
+    {
+        return this.value;
+    }
+
+    public void setValue( String value )
+    {
+        this.value = value;
+    }
+
+}
Index: kalumet-modules/console2/src/main/resources/log4j.xml
===================================================================
--- kalumet-modules/console2/src/main/resources/log4j.xml	(revision 0)
+++ kalumet-modules/console2/src/main/resources/log4j.xml	(working copy)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"; debug="false">
+
+  <!--<appender name="FILE" class="org.apache.log4j.FileAppender">-->
+    <!--<param name="threshold" value="DEBUG"/>-->
+      <!--&lt;!&ndash;TODO Remove temporary logfile &ndash;&gt;-->
+    <!--<param name="File" value="/home/rdietz/work/kalumet-data/apache-kalumet-console.log"/>-->
+    <!--<layout class="org.apache.log4j.PatternLayout">-->
+      <!--<param name="ConversionPattern" value="%d{ABSOLUTE} | %-5p | %-10t | %-24.24c{1} | %-30.30C %4L | %m%n"/>-->
+    <!--</layout>-->
+  <!--</appender>-->
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <param name="threshold" value="DEBUG"/>
+        <!--TODO Remove temporary logfile -->
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d{ABSOLUTE} | %-5p | %-10t | %-24.24c{1} | %-30.30C %4L | %m%n"/>
+        </layout>
+    </appender>
+
+  <logger name="org.apache">
+    <level value="WARN"/>
+  </logger>
+
+  <logger name="org.quartz">
+    <level value="WARN"/>
+  </logger>
+
+    <logger name="org.glassfish.jersey.test">
+        <level value="DEBUG"/>
+        <appender-ref ref="CONSOLE"/>
+    </logger>
+
+    <logger name="org.apache.kalumet">
+    <!-- To enable debug logging, replace the INFO by DEBUG -->
+      <level value="INFO"/>
+      <!--<level value="DEBUG"/>-->
+  </logger>
+
+  <root>
+    <level value="DEBUG"/>
+    <appender-ref ref="CONSOLE"/>
+  </root>
+
+
+</log4j:configuration>
+
+    <!--
+
+    Log4J Configuration Quick Reference:
+    ====================================
+
+    Priority order is DEBUG < INFO < WARN < ERROR < FATAL
+
+    PatternLayout conversion characters:
+
+    %c   Category of the logging event
+    %C   Fully qualified class name of the caller
+    %d   Date of the logging event  (example: %d{HH:mm:ss,SSS} )
+    %F   File name where the logging request was issued (caution: extremely slow)
+    %l   Location information of the caller (caution: extremely slow)
+    %L   Line number from where the logging request was issued (caution: extremely slow)
+    %m   Application-supplied message
+    %M   Method name from where the logging request was issued (caution: extremely slow)
+    %n   Line separator
+    %p   Priority of the logging event
+    %r   Number of milliseconds since the start of the application
+    %t   Name of the thread that generated the logging event
+    %x   Nested diagnotic context associated with the thread
+    %%   A single percent sign
+
+    Format modifiers examples:
+
+    %20c     Left pad with spaces if category is less than 20 characters long
+    %-20c    Right pad with spaces if category is less than 20 characters long
+    %.30c    Truncate from the beginning if category is more than 30 chars long
+    %20.30c  Left pad 20 chars + truncate from beginning if more than 30 chars
+    %-20.30c Right pad 20 chars + truncate from beginning if more than 30 chars
+
+    Examples:  "%r [%t] %-5p %c %x - %m\n"
+    "%-6r [%15.15t] %-5p %30.30c %x - %m\n"
+
+    -->
Index: kalumet-modules/console2/src/main/webapp/WEB-INF/web.xml
===================================================================
--- kalumet-modules/console2/src/main/webapp/WEB-INF/web.xml	(revision 0)
+++ kalumet-modules/console2/src/main/webapp/WEB-INF/web.xml	(working copy)
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<!DOCTYPE web-app PUBLIC
+
+        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+        "http://java.sun.com/dtd/web-app_2_3.dtd"; >
+
+<web-app>
+  <display-name>Archetype Created Web Application</display-name>
+  <servlet>
+    <servlet-name>Kalumet REST API</servlet-name>
+    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
+    <init-param>
+      <param-name>javax.ws.rs.Application</param-name>
+      <param-value>org.apache.kalumet.console2.KalumetApplication</param-value>
+    </init-param>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>Kalumet REST API</servlet-name>
+    <url-pattern>/api/*</url-pattern>
+  </servlet-mapping>
+</web-app>
\ No newline at end of file

Property changes on: kalumet-modules/console2/src/main/webapp/WEB-INF/web.xml
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: kalumet-modules/console2/src/test/java/org/apache/kalumet/console2/api/UserApiTest.java
===================================================================
--- kalumet-modules/console2/src/test/java/org/apache/kalumet/console2/api/UserApiTest.java	(revision 0)
+++ kalumet-modules/console2/src/test/java/org/apache/kalumet/console2/api/UserApiTest.java	(working copy)
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.kalumet.console2.api;
+
+import org.apache.kalumet.console2.KalumetApplication;
+import org.apache.kalumet.model.User;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.LinkedList;
+import java.util.List;
+
+
+/**
+ * Note that test case data is loaded into the Kalumet object through the
+ * 'test-config.xml' file under test/resources.
+ *
+ * @author rdietz
+ */
+public class UserApiTest extends JerseyTest
+{
+    @Override
+    protected Application configure()
+    {
+        // need to return the Kalumet Application to ensure our classes are properly
+        // registered for the test (e.g. - ConfigurationManager is a singleton)
+        return new KalumetApplication(UserApiService.class);
+    }
+
+    @Test
+    public void testGetAllUsers()
+    {
+        LinkedList users = target("users").request().get(LinkedList.class);
+        Assert.assertEquals(3, users.size());
+    }
+
+    @Test
+    public void testGetSpecificUser()
+    {
+        // note these values are set in the test config file under /test/resources/
+        User user = target("/users/user1").request().get(User.class);
+        Assert.assertEquals("user1", user.getId());
+        Assert.assertEquals("User 1", user.getName());
+        Assert.assertEquals("[email protected]", user.getEmail());
+        Assert.assertEquals("5f4dcc3b5aa765d61d8327deb882cf99", user.getPassword());
+
+        user = target("/users/admin").request().get(User.class);
+        Assert.assertEquals("admin", user.getId());
+        Assert.assertEquals("admin", user.getName());
+        Assert.assertEquals("[email protected]", user.getEmail());
+        Assert.assertEquals("21232f297a57a5a743894a0e4a801fc3", user.getPassword());
+    }
+
+    @Test
+    public void testCreateUser()
+    {
+        String NEW_USER_ID = "user2";
+        String NEW_USER_NAME = "User 2";
+        String NEW_USER_EMAIL = "[email protected]";
+        String NEW_USER_PASSWORD = "5f4dcc3b5aa765d61d8327deb882cf99%";
+
+        // Get the starting user count
+        List users = target("users").request().get(List.class);
+        int startCount = users.size();
+
+        // create a new user
+        User newUser = new User();
+        newUser.setId(NEW_USER_ID);
+        newUser.setName(NEW_USER_NAME);
+        newUser.setEmail(NEW_USER_EMAIL);
+        newUser.setPassword(NEW_USER_PASSWORD);
+
+        // send the request
+        Entity<User> userEntity = Entity.entity(newUser, MediaType.APPLICATION_JSON_TYPE);
+        target("/users").request().post(userEntity);
+
+        // verify the user was created
+        users = target("users").request().get(List.class);
+        Assert.assertEquals(startCount+1, users.size());
+
+        // get the user and verify it's correct
+        User user = target("/users/"+NEW_USER_ID).request().get(User.class);
+        Assert.assertEquals(NEW_USER_ID, user.getId());
+        Assert.assertEquals(NEW_USER_NAME, user.getName());
+        Assert.assertEquals(NEW_USER_EMAIL, user.getEmail());
+        Assert.assertEquals(NEW_USER_PASSWORD, user.getPassword());
+    }
+
+    @Test
+    /*
+     * Verify that we can delete user3 in the config
+     */
+    public void testDeleteUser()
+    {
+        // Get the starting user count
+        List users = target("users").request().get(List.class);
+        int startCount = users.size();
+
+        // verify we can extract user3
+        User user = target("/users/user3").request().get(User.class);
+        Assert.assertEquals("user3", user.getId());
+
+        // now delete user3
+        Response response = target("/users/user3").request().delete(Response.class);
+        Assert.assertEquals(204, response.getStatus());
+
+        // verify the user was deleted
+        users = target("users").request().get(List.class);
+        Assert.assertEquals(startCount - 1, users.size());
+
+        try
+        {
+            target("/users/user2").request().get(User.class);
+        }
+        catch (javax.ws.rs.NotFoundException e)
+        {
+            // Expected exception, so nothing to do
+        }
+    }
+
+    @Test
+    public void testUpdateUser()
+    {
+        final String UPDATED_NAME = "XXXX";
+
+        // get an existing user
+        User user = target("/users/user1").request().get(User.class);
+        String oldName = user.getName();
+
+        // modify the user and update
+        user.setName(UPDATED_NAME);
+        Entity<User> userEntity = Entity.entity(user, MediaType.APPLICATION_JSON_TYPE);
+        target("/users/user1").request().put(userEntity);
+
+        // now check the changes were made to the user
+        user = target("/users/user1").request().get(User.class);
+        Assert.assertEquals("user1", user.getId());
+        Assert.assertNotEquals("User 1", user.getName());
+        Assert.assertEquals(UPDATED_NAME, user.getName());
+        Assert.assertEquals("[email protected]", user.getEmail());
+        Assert.assertEquals("5f4dcc3b5aa765d61d8327deb882cf99", user.getPassword());
+
+        // put the name back for future tests
+        user.setName(oldName);
+        userEntity = Entity.entity(user, MediaType.APPLICATION_JSON_TYPE);
+        target("/users/user1").request().put(userEntity);
+    }
+}
Index: kalumet-modules/console2/src/test/resources/kalumet-console-config.xml
===================================================================
--- kalumet-modules/console2/src/test/resources/kalumet-console-config.xml	(revision 0)
+++ kalumet-modules/console2/src/test/resources/kalumet-console-config.xml	(working copy)
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<kalumet-console>
+
+    <property name="ConfigurationLocation" value="src/test/resources/test-config.xml"/>
+    <property name="JournalsLocation" value="journals"/>
+
+</kalumet-console>
\ No newline at end of file
Index: kalumet-modules/console2/src/test/resources/test-config.xml
===================================================================
--- kalumet-modules/console2/src/test/resources/test-config.xml	(revision 0)
+++ kalumet-modules/console2/src/test/resources/test-config.xml	(working copy)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<kalumet>
+    <properties>
+        <property name="LogEventAppender" value="werew"/>
+        <property name="LdapAuthentication" value="false"/>
+        <property name="LdapServer" value="werew"/>
+        <property name="LdapBaseDN" value="werwer"/>
+        <property name="LdapUidAttribute" value="ewrwer"/>
+        <property name="LdapMailAttribute" value="werewr"/>
+        <property name="LdapCnAttribute" value=""/>
+    </properties>
+    <security>
+        <users>
+            <user email="[email protected]" id="admin" name="admin" password="21232f297a57a5a743894a0e4a801fc3"/>
+            <user email="[email protected]" id="user1" name="User 1" password="5f4dcc3b5aa765d61d8327deb882cf99"/>
+            <user email="[email protected]" id="user3" name="User 3" password="5f4dcc3b5aa765d61d8327deb882cf99"/>
+        </users>
+        <groups>
+            <group id="admin" name="admin">
+                <users>
+                    <user email="" id="admin" name="admin" password="21232f297a57a5a743894a0e4a801fc3"/>
+                </users>
+            </group>
+        </groups>
+    </security>
+    <agents>
+        <agent cron="0 0 0 0 0 0" hostname="test=host" id="123"
+               maxjeeapplicationserversstarted="0" maxmanagedenvironments="0" port="2020"/>
+    </agents>
+    <environments>
+        <environment agent="" autoupdate="false" group="my_group" lock=""
+                     name="test_environment" releaseLocation="" tag="testing">
+            <variables>
+                <variable name="var1" value="value1"/>
+            </variables>
+            <freefields>
+                <freefield name="field1"><![CDATA[value1]]></freefield>
+                <freefield name="field2"><![CDATA[value2]]></freefield>
+            </freefields>
+            <accesses/>
+            <notes><![CDATA[notes]]></notes>
+            <weblinks><![CDATA[web notes]]></weblinks>
+            <jeeapplicationservers cluster="false">
+                <jeeapplicationserver active="true" adminpassword="test"
+                                      adminuser="admin-user" agent="123" blocker="false"
+                                      classname="org.apache.kalumet.controller.jboss.JBoss4Controller"
+                                      deletecomponents="false" jmxurl="test-url"
+                                      name="jee server" updateRequireCacheCleaning="false"
+                                      updateRequireRestart="false" usejmxstop="false">
+                    <startupcommand><![CDATA[startup]]></startupcommand>
+                    <shutdowncommand><![CDATA[shutdown]]></shutdowncommand>
+                    <jdbcconnectionpools>
+                        <jdbcconnectionpool active="false" blocker="false"
+                                            classpath="test-path"
+                                            driver="oracle.jdbc.driver.OracleDriver"
+                                            helperclass="com.ibm.websphere.rsadapter.GenericDataStoreHelper"
+                                            increment="2" initial="2" maximal="2"
+                                            name="test-pool-1" password="test" url="test-url" user="test-user"/>
+                    </jdbcconnectionpools>
+                    <jdbcdatasources>
+                        <jdbcdatasource active="true" blocker="false"
+                                        name="test-source" pool="test-pool-1"/>
+                    </jdbcdatasources>
+                    <jmsconnectionfactories>
+                        <jmsconnectionfactory active="true" blocker="false" name="test-factory-1"/>
+                    </jmsconnectionfactories>
+                    <jmsservers>
+                        <jmsserver active="false" blocker="false" name="test-jms-server">
+                            <jmsqueues>
+                                <jmsqueue name="test-queue"/>
+                            </jmsqueues>
+                            <jmstopics>
+                                <jmstopic name="test-topic"/>
+                            </jmstopics>
+                        </jmsserver>
+                    </jmsservers>
+                    <jndibindings>
+                        <jndibinding active="true" blocker="false"
+                                     jndialias="werewrewr" jndiname="dsfsdfsd"
+                                     name="sdfdsf" providerurl="werewrewrrew"/>
+                    </jndibindings>
+                    <sharedlibrairies>
+                        <sharedlibrary active="true" blocker="false"
+                                       classpath="ewewrewrrewr" name="werewrrewr"/>
+                    </sharedlibrairies>
+                    <jeeapplications/>
+                    <caches>
+                        <cache path="ewrewrewrewrewrewr"/>
+                    </caches>
+                </jeeapplicationserver>
+            </jeeapplicationservers>
+            <softwares>
+                <software active="true" agent="123" beforejee="false"
+                          blocker="false" name="MySoftware" uri="http://some.server/softrware";>
+                    <updateplan/>
+                </software>
+            </softwares>
+            <logfiles>
+                <logfile agent=" " name="efwef" path="efewf"/>
+            </logfiles>
+            <notifiers countdown="0"/>
+            <publishers/>
+            <statistics lastchangedate="" lastupdatedate="" updatecount="0"/>
+        </environment>
+    </environments>
+</kalumet>
\ No newline at end of file
Index: kalumet-modules/pom.xml
===================================================================
--- kalumet-modules/pom.xml	(revision 1652561)
+++ kalumet-modules/pom.xml	(working copy)
@@ -38,6 +38,7 @@
     <module>agent</module>
     <module>utils</module>
     <module>console</module>
+    <module>console2</module>
     <module>controller</module>
   </modules>
 
Index: pom.xml
===================================================================
--- pom.xml	(revision 1652561)
+++ pom.xml	(working copy)
@@ -378,6 +378,12 @@
         <version>${project.version}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.kalumet</groupId>
+        <artifactId>org.apache.kalumet.console2</artifactId>
+        <type>war</type>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>${slf4j.version}</version>

Reply via email to