You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2012/04/23 09:45:38 UTC

svn commit: r1329106 [6/6] - in /maven/scm/trunk: ./ maven-scm-client/ maven-scm-client/src/main/resources/META-INF/plexus/ maven-scm-providers/ maven-scm-providers/maven-scm-provider-accurev/src/test/java/org/apache/maven/scm/provider/accurev/command/...

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTckTest.java?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTckTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTckTest.java Mon Apr 23 07:45:33 2012
@@ -0,0 +1,80 @@
+package org.apache.maven.scm.provider.jazz.command.tag;
+
+import java.io.File;
+
+import org.apache.maven.scm.provider.jazz.command.JazzTckUtil;
+import org.apache.maven.scm.tck.command.tag.TagCommandTckTest;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
+ */
+public class JazzTagCommandTckTest
+    extends TagCommandTckTest
+{
+    // Easy access to our Tck Test Helper class.
+    private JazzTckUtil jazzTckUtil = new JazzTckUtil();
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTckTestCase#initRepo()
+     */
+    @Override
+    public void initRepo()
+        throws Exception
+    {
+        // Create a unique repository workspace for this test.
+        jazzTckUtil.initRepo( getScmRepository() );
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTckTestCase#removeRepo()
+     */
+    @Override
+    public void removeRepo()
+        throws Exception
+    {
+        super.removeRepo();
+        jazzTckUtil.removeRepo();
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTckTestCase#getScmUrl()
+     */
+    @Override
+    public String getScmUrl()
+        throws Exception
+    {
+        return jazzTckUtil.getScmUrl();
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTestCase#getWorkingCopy()
+     */
+    @Override
+    protected File getWorkingCopy()
+    {
+        return jazzTckUtil.getWorkingCopy();
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTckTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTckTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTest.java?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTest.java Mon Apr 23 07:45:33 2012
@@ -0,0 +1,80 @@
+package org.apache.maven.scm.provider.jazz.command.tag;
+
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.provider.jazz.JazzScmTestCase;
+import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
+ */
+public class JazzTagCommandTest
+    extends JazzScmTestCase
+{
+    private JazzScmProviderRepository repo;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        repo = getScmProviderRepository();
+
+        // Simulate the output of the parsing of the "scm status" command.
+        // IE, fill in the workspace and stream details
+        // Only needed for tests that require "pushChanges" type operations.
+        repo.setWorkspace( "Dave's Repository Workspace" );
+        repo.setFlowTarget( "Dave's Stream" );
+    }
+
+    public void testCreateTagCreateSnapshotCommand()
+        throws Exception
+    {
+        ScmTagParameters scmTagParameters = new ScmTagParameters( "My Tag Message" );
+        Commandline cmd = new JazzTagCommand().createTagCreateSnapshotCommand( repo, getScmFileSet(), "My_Tag_Name", scmTagParameters ).getCommandline();
+        String expected = "scm create snapshot --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword --name My_Tag_Name --description \"My Tag Message\" \"Dave's Repository Workspace\"";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCreateTagCreateWorkspaceCommand()
+        throws Exception
+    {
+        Commandline cmd = new JazzTagCommand().createTagCreateWorkspaceCommand( repo, getScmFileSet(), "My_Snapshot_Name" ).getCommandline();
+        String expected = "scm create workspace --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword My_Snapshot_Name --snapshot My_Snapshot_Name";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCreateTagDeliverCommand()
+        throws Exception
+    {
+        Commandline cmd = new JazzTagCommand().createTagDeliverCommand( repo, getScmFileSet(), "My_Tag_Name" ).getCommandline();
+        String expected = "scm deliver --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword --source My_Tag_Name --target \"Dave's Stream\"";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCreateTagSnapshotPromoteCommand()
+        throws Exception
+    {
+        Commandline cmd = new JazzTagCommand().createTagSnapshotPromoteCommand( repo, getScmFileSet(), "My_Snapshot_Name" ).getCommandline();
+        String expected = "scm snapshot promote --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword \"Dave's Stream\" My_Snapshot_Name";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/tag/JazzTagCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommandTest.java?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommandTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommandTest.java Mon Apr 23 07:45:33 2012
@@ -0,0 +1,60 @@
+package org.apache.maven.scm.provider.jazz.command.unedit;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.provider.jazz.JazzScmTestCase;
+import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
+ */
+public class JazzUnEditCommandTest
+    extends JazzScmTestCase
+{
+    private JazzScmProviderRepository repo;
+    
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        repo = getScmProviderRepository();
+    }
+
+    public void testCreateUneditCommandWithSpecificFiles()
+        throws Exception
+    {
+        Commandline cmd = new JazzUnEditCommand().createUneditCommand( repo, getScmFileSet() ).getCommandline();
+        String expected = "scm lock release --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword file1 file2";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+
+    public void testCreateUneditCommandWithEmptyFileSet()
+        throws Exception
+    {
+        // An empty file set will be all files, which jazz will take as a "."
+        Commandline cmd = new JazzUnEditCommand().createUneditCommand( repo, new ScmFileSet( new File(".") ) ).getCommandline();
+        String expected = "scm lock release --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword .";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/unedit/JazzUnEditCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTckTest.java?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTckTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTckTest.java Mon Apr 23 07:45:33 2012
@@ -0,0 +1,91 @@
+package org.apache.maven.scm.provider.jazz.command.update;
+
+import java.io.File;
+
+import org.apache.maven.scm.provider.jazz.command.JazzTckUtil;
+import org.apache.maven.scm.tck.command.update.UpdateCommandTckTest;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
+ */
+public class JazzUpdateCommandTckTest
+    extends UpdateCommandTckTest
+{
+    // Easy access to our Tck Test Helper class.
+    private JazzTckUtil jazzTckUtil = new JazzTckUtil();
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTckTestCase#initRepo()
+     */
+    @Override
+    public void initRepo()
+        throws Exception
+    {
+        // Create a unique repository workspace for this test.
+        jazzTckUtil.initRepo( getScmRepository() );
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTckTestCase#removeRepo()
+     */
+    @Override
+    public void removeRepo()
+        throws Exception
+    {
+        super.removeRepo();
+        jazzTckUtil.removeRepo();
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTckTestCase#getScmUrl()
+     */
+    @Override
+    public String getScmUrl()
+        throws Exception
+    {
+        return jazzTckUtil.getScmUrl();
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTestCase#getWorkingCopy()
+     */
+    @Override
+    protected File getWorkingCopy()
+    {
+        return jazzTckUtil.getWorkingCopy();
+    }
+
+    /**
+     * {@inheritDoc}
+     * @see org.apache.maven.scm.ScmTestCase#getUpdatingCopy()
+     */
+    @Override
+    protected File getUpdatingCopy()
+    {
+        return jazzTckUtil.getUpdatingCopy();
+    }
+    
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTckTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTckTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTest.java?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTest.java Mon Apr 23 07:45:33 2012
@@ -0,0 +1,48 @@
+package org.apache.maven.scm.provider.jazz.command.update;
+
+import org.apache.maven.scm.provider.jazz.JazzScmTestCase;
+import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
+ */
+public class JazzUpdateCommandTest
+    extends JazzScmTestCase
+{
+    private JazzScmProviderRepository repo;
+    
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        repo = getScmProviderRepository();
+    }
+
+    public void testCreateAcceptCommand()
+        throws Exception
+    {
+        Commandline cmd = new JazzUpdateCommand().createAcceptCommand( repo, getScmFileSet() ).getCommandline();
+        String expected = "scm accept --repository-uri https://localhost:9443/jazz --username myUserName --password myPassword --flow-components";
+        assertCommandLine( expected, getWorkingDirectory(), cmd );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/command/update/JazzUpdateCommandTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepositoryTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepositoryTest.java?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepositoryTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepositoryTest.java Mon Apr 23 07:45:33 2012
@@ -0,0 +1,268 @@
+package org.apache.maven.scm.provider.jazz.repository;
+
+/*
+ * 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.
+ */
+
+import java.util.List;
+
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.manager.NoSuchScmProviderException;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+
+/**
+ * @author <a href="mailto:ChrisGWarp@gmail.com">Chris Graham</a>
+ */
+public class JazzScmProviderRepositoryTest
+    extends ScmTestCase
+{
+    private ScmManager scmManager;
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        scmManager = getScmManager();
+    }
+
+    // ----------------------------------------------------------------------
+    // Testing legal URLs
+    // "scm:jazz:[username[;password]@]http[s]://server_name[:port]/contextRoot:repositoryWorkspace";
+    // ----------------------------------------------------------------------
+
+    public void testLegalFullHttpURI()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@http://server_name:9443/contextRoot:repositoryWorkspace", "http://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalHttpURI()
+        throws Exception
+    {
+        testUrl( "scm:jazz:http://server_name:9443/contextRoot:repositoryWorkspace", "http://server_name:9443/contextRoot", null, null, "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalFullHttpURIWithLongPath()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@http://server_name:9443/some/long/contextRoot:repositoryWorkspace", "http://server_name:9443/some/long/contextRoot", "username", "password", "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalHttpURIWithLongPath()
+        throws Exception
+    {
+        testUrl( "scm:jazz:http://server_name:9443/some/long/contextRoot:repositoryWorkspace", "http://server_name:9443/some/long/contextRoot", null, null, "server_name", 9443, "repositoryWorkspace" );
+    }
+    
+    public void testLegalFullHttpURIWithShortPath()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@http://server_name:9443/:repositoryWorkspace", "http://server_name:9443/", "username", "password", "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalHttpURIWithShortPathPath()
+        throws Exception
+    {
+        testUrl( "scm:jazz:http://server_name:9443/:repositoryWorkspace", "http://server_name:9443/", null, null, "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    
+    public void testLegalFullHttpURIWithShortPathAndNoPort()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@http://server_name/:repositoryWorkspace", "http://server_name/", "username", "password", "server_name", 0, "repositoryWorkspace" );
+    }
+
+    public void testLegalHttpURIWithShortPathPathAndNoPort()
+        throws Exception
+    {
+        testUrl( "scm:jazz:http://server_name/:repositoryWorkspace", "http://server_name/", null, null, "server_name", 0, "repositoryWorkspace" );
+    }
+    
+    public void testLegalHttpURIWithUser()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username@http://server_name:9443/contextRoot:repositoryWorkspace", "http://server_name:9443/contextRoot", "username", null, "server_name", 9443, "repositoryWorkspace" );
+    }
+    
+    public void testLegalHttpURIWithUserAndPassword()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@http://server_name:9443/contextRoot:repositoryWorkspace", "http://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalFullHttpsURI()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@https://server_name:9443/contextRoot:repositoryWorkspace", "https://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalHttpsURI()
+        throws Exception
+    {
+        testUrl( "scm:jazz:https://server_name:9443/contextRoot:repositoryWorkspace", "https://server_name:9443/contextRoot", null, null, "server_name", 9443, "repositoryWorkspace" );
+    }
+    
+    public void testLegalHttpsURINoPort()
+        throws Exception
+    {
+        testUrl( "scm:jazz:https://server_name/contextRoot:repositoryWorkspace", "https://server_name/contextRoot", null, null, "server_name", 0, "repositoryWorkspace" );
+    }
+
+    public void testLegalHttpsURIWithUser()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username@https://server_name:9443/contextRoot:repositoryWorkspace", "https://server_name:9443/contextRoot", "username", null, "server_name", 9443, "repositoryWorkspace" );
+    }
+    
+    public void testLegalHttpsURIWithUserAndPassword()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@https://server_name:9443/contextRoot:repositoryWorkspace", "https://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "repositoryWorkspace" );
+    }
+
+    public void testLegalFullHttpURIWithSpaces()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@http://server_name:9443/contextRoot:repository Workspace", "http://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "repository Workspace" );
+    }
+
+    public void testLegalFullHttpsURIWithSpaces()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@https://server_name:9443/contextRoot:repository Workspace", "https://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "repository Workspace" );
+    }
+
+    public void testLegalFullHttpsURIWithSpacesAndQuote()
+        throws Exception
+    {
+        testUrl( "scm:jazz:username;password@https://server_name:9443/contextRoot:Dave's Repository Workspace", "https://server_name:9443/contextRoot", "username", "password", "server_name", 9443, "Dave's Repository Workspace" );
+    }
+
+    // ----------------------------------------------------------------------
+    // Testing illegal URLs
+    // "scm:jazz:[username[;password]@]http[s]://server_name[:port]/contextRoot:repositoryWorkspace";
+    // Something missing or broken in the above.
+    // ----------------------------------------------------------------------
+
+    public void testIllegalFullHttpsURIWithMissingPathOrWorkspace()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:username;password@https://server_name:9443/contextRootOrWorkspaceIsMissing" );
+    }
+
+    public void testIllegalFullHttpsURIWithMissingPathOrWorkspaceAndPort()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:username;password@https://server_name/contextRootOrWorkspaceIsMissing" );
+    }
+
+    public void testIllegalFullHttpsURIWithMissingPathOrWorkspaceAndUsernameAndPasswordAndPort()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:https://server_name/contextRootOrWorkspaceIsMissing" );
+    }
+
+    public void testIllegalFullHttpsURIWithMissingPortButWithColon()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:username;password@https://server_name:/contextRoot:repositoryWorkspace" );
+    }
+
+    public void testIllegalFullHttpsURIWithMissingPortAndPathOrWorkspace()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:username;password@https://server_name/contextRootOrWorkspaceIsMissing" );
+    }
+
+    public void testIllegalWrongProtocolURI()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:username;password@ssh://server_name/contextRoot/repositoryWorkspace" );
+    }
+
+    public void testIllegalFullHttpsURIWithBadPort()
+        throws Exception
+    {
+        testBrokenUrl( "scm:jazz:username;password@https://server_name:xxxx/contextRoot:repositoryWorkspace" );
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    private void testUrl( String scmUrl, String expectedrepositoryURI, String expectedUser, String expectedPassword,
+                          String expectedHost, int expectedPort, String expectedRepositoryWorkspace )
+        throws Exception
+    {
+        // The messages are the lines returned from the ScmRepositoryException when thrown on a failure.
+        List<String> messages = scmManager.validateScmRepository( scmUrl );
+        assertEquals( "Excepected zero messages back from URL Validation, but got: " + messages.size() + " messages. Contents = " + messages, 0, messages.size() );
+        
+        // Get an instance of the JazzScmProviderRepository, parsing the URL as we go.
+        ScmRepository repository = scmManager.makeScmRepository( scmUrl );
+
+        assertNotNull( "ScmManager.makeScmRepository() returned null!", repository );
+
+        assertNotNull( "The provider repository was null!", repository.getProviderRepository() );
+
+        assertTrue( "The SCM Repository isn't a " + JazzScmProviderRepository.class.getName() + "!",
+                    repository.getProviderRepository() instanceof JazzScmProviderRepository );
+
+        // Now that we have it, query the rest of the jazz specific values. 
+        JazzScmProviderRepository providerRepository = (JazzScmProviderRepository) repository.getProviderRepository();
+
+        assertEquals( "The URI is incorrect!", expectedrepositoryURI, providerRepository.getRepositoryURI() );
+
+        assertEquals( "The URI string is incorrect!", "jazz:" + expectedrepositoryURI + ":" + expectedRepositoryWorkspace, repository.toString() );
+
+        assertEquals( "The user is incorrect!", expectedUser, providerRepository.getUser() );
+
+        assertEquals( "The password is incorrect!", expectedPassword, providerRepository.getPassword() );
+
+        assertEquals( "The host is incorrect!", expectedHost,
+                      ( (JazzScmProviderRepository) repository.getProviderRepository() ).getHost() );
+
+        if (expectedPort > 0)
+        {
+            assertEquals( "The port is incorrect!", expectedPort, providerRepository.getPort() );
+        }
+
+        assertEquals( "The RepositoryWorkspace is incorrect!", expectedRepositoryWorkspace, providerRepository.getRepositoryWorkspace() );
+    }
+
+    private void testBrokenUrl( String scmUrl )
+    {
+        try
+        {
+            ScmRepository repository = scmManager.makeScmRepository( scmUrl );
+            fail( "The expected ScmRepositoryException did not occur! " + repository );
+        }
+        catch (ScmRepositoryException expected)
+        {
+            // This is the expected behaviour, so we do nothing.
+        }
+        catch ( NoSuchScmProviderException unexpected )
+        {
+            fail( "Unexpected failure! " + unexpected.getMessage() );
+        }
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepositoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-jazz/src/test/java/org/apache/maven/scm/provider/jazz/repository/JazzScmProviderRepositoryTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/pom.xml?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/pom.xml Mon Apr 23 07:45:33 2012
@@ -30,7 +30,7 @@
 
   <artifactId>maven-scm-provider-gittest</artifactId>
 
-  <name>Maven SCM git Provider TCK Tests</name>
+  <name>Maven SCM Git Provider TCK Tests</name>
   <description>Tests library for SCM Git Provider.</description>
 
   <dependencies>

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-standard/pom.xml Mon Apr 23 07:45:33 2012
@@ -104,5 +104,10 @@
       <artifactId>maven-scm-provider-integrity</artifactId>
       <scope>runtime</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-jazz</artifactId>
+      <scope>runtime</scope>
+    </dependency>
   </dependencies>
 </project>

Modified: maven/scm/trunk/maven-scm-providers/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/pom.xml?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/pom.xml (original)
+++ maven/scm/trunk/maven-scm-providers/pom.xml Mon Apr 23 07:45:33 2012
@@ -50,6 +50,7 @@
     <module>maven-scm-provider-vss</module>
     <module>maven-scm-provider-tfs</module>
     <module>maven-scm-provider-integrity</module>
+    <module>maven-scm-provider-jazz</module>
   </modules>
 
   <dependencyManagement>

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java (original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTckTestCase.java Mon Apr 23 07:45:33 2012
@@ -19,12 +19,6 @@ package org.apache.maven.scm;
  * under the License.
  */
 
-import org.apache.maven.scm.command.add.AddScmResult;
-import org.apache.maven.scm.command.checkout.CheckOutScmResult;
-import org.apache.maven.scm.provider.ScmProvider;
-import org.apache.maven.scm.repository.ScmRepository;
-import org.codehaus.plexus.util.StringUtils;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -32,6 +26,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
+import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.ScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.StringUtils;
+
 /**
  * <p/>
  * Base class for all TcK tests.
@@ -57,7 +58,7 @@ public abstract class ScmTckTestCase
     private List<String> scmFileNames;
 
     /**
-     * @return A provider spesific and valid url for the repository
+     * @return A provider specific and valid url for the repository
      * @throws Exception if any
      */
     public abstract String getScmUrl()
@@ -106,16 +107,16 @@ public abstract class ScmTckTestCase
 
         scmRepository = null;
 
-        initRepo();
-
-        checkOut( getWorkingCopy(), getScmRepository() );
-
         scmFileNames = new ArrayList<String>( 4 );
         scmFileNames.add( "/pom.xml" );
         scmFileNames.add( "/readme.txt" );
         scmFileNames.add( "/src/main/java/Application.java" );
         scmFileNames.add( "/src/test/java/Test.java" );
 
+        initRepo();
+
+        checkOut( getWorkingCopy(), getScmRepository() );
+
         Iterator<String> it = getScmFileNames().iterator();
         while ( it.hasNext() )
         {
@@ -124,6 +125,29 @@ public abstract class ScmTckTestCase
     }
 
     /**
+     * This method is available to those SCM clients that need to perform
+     * a cleanup at the end of the tests. It is needed when server side
+     * operations are performed, or the check out dirs are outside
+     * of the normal target directory.
+     */
+    public void removeRepo()
+        throws Exception
+    {
+    }
+
+    /**
+     * Provided to allow removeRepo() to be called. 
+     * @see junit.framework.TestCase#tearDown()
+     */
+    @Override
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+        removeRepo();
+    }
+
+    /**
      * Convenience method to get the ScmRepository for this provider
      */
     protected ScmRepository getScmRepository()
@@ -138,7 +162,7 @@ public abstract class ScmTckTestCase
     }
 
     /**
-     * Convenience method to checkout files from the repository
+     * Convenience method to check out files from the repository
      */
     protected CheckOutScmResult checkOut( File workingDirectory, ScmRepository repository )
         throws Exception
@@ -153,6 +177,20 @@ public abstract class ScmTckTestCase
     }
 
     /**
+     * Convenience method to check in files to the repository
+     */
+    protected CheckInScmResult checkIn( File workingDirectory, ScmRepository repository )
+        throws Exception
+    {
+        CheckInScmResult result = getScmManager().getProviderByUrl( getScmUrl() )
+            .checkIn( repository, new ScmFileSet( workingDirectory ), (ScmVersion) null, "Initial Checkin" );
+
+        assertTrue( "Check result was successful, output: " + result.getCommandOutput(), result.isSuccess() );
+
+        return result;
+    }
+    
+    /**
      * Convenience method to add a file to the working tree at the working directory
      */
     protected void addToWorkingTree( File workingDirectory, File file, ScmRepository repository )

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java (original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java Mon Apr 23 07:45:33 2012
@@ -41,7 +41,7 @@ import java.util.TimeZone;
  * extend this class while tck test would extend ScmTckTestCase.
  * <br>
  * This class basically defines default locations for the
- * test enviroment and implements convenience methods.
+ * test environment and implements convenience methods.
  *
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
  * @version $Id$

Modified: maven/scm/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/pom.xml?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/pom.xml (original)
+++ maven/scm/trunk/pom.xml Mon Apr 23 07:45:33 2012
@@ -243,6 +243,11 @@
         <artifactId>maven-scm-provider-tfs</artifactId>
         <version>${project.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.maven.scm</groupId>
+        <artifactId>maven-scm-provider-jazz</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <!-- end providers declaration -->
 
       <!-- Plexus -->

Added: maven/scm/trunk/src/site/apt/jazz.apt
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/apt/jazz.apt?rev=1329106&view=auto
==============================================================================
--- maven/scm/trunk/src/site/apt/jazz.apt (added)
+++ maven/scm/trunk/src/site/apt/jazz.apt Mon Apr 23 07:45:33 2012
@@ -0,0 +1,197 @@
+ ------
+ SCM Implementation: Jazz
+ ------
+ Chris Graham
+ --------------
+ 2012-03-19
+ --------------
+
+ ~~ 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.
+
+ ~~ NOTE: For help with the syntax of this file, see:
+ ~~ http://maven.apache.org/doxia/references/apt-format.html
+
+SCM Implementation: Jazz
+
+* General Info
+
+   This SCM provider wrappers the underlying command line tool "scm" that is provided as part of Jazz SCM offering.
+   As such, this provider is subject to the capabilities provided by the scm tool. 
+   
+   The scm tool itself is documented at:
+   
+   *V2.0.0 {{http://publib.boulder.ibm.com/infocenter/rtc/v2r0m0/topic/com.ibm.team.scm.doc/topics/r_scm_cli_scm.html}}
+   
+   *V3.0 {{http://publib.boulder.ibm.com/infocenter/clmhelp/v3r0/topic/com.ibm.team.scm.doc/topics/r_scm_cli_scm.html}}
+   
+   * V3.0.1 {{http://publib.boulder.ibm.com/infocenter/clmhelp/v3r0m1/topic/com.ibm.team.scm.doc/topics/r_scm_cli_scm.html}}
+
+   []
+   
+   Jazz is available from:
+   
+   Link: {{http://jazz.net/}}
+
+   License: Free
+
+   IBM Rational Team Concert is IBM commercial offering based upon the Jazz base platform. This provider may
+   also be used with RTC. 
+      
+   Link: {{http://www-01.ibm.com/software/rational/products/rtc/}}
+
+   License: Commercial
+
+* Environment Configuration
+
+   The Jazz SCM source control command line tools are installed in JazzInstallDir/scmtools/eclipse,
+   which may not have been added to your default path. You must make sure that this path is available to maven when
+   using this provider.
+   
+   Additionally, the user used to log onto the Jazz SCM server must be assigned a
+   {{{http://publib.boulder.ibm.com/infocenter/clmhelp/v3r0m1/topic/com.ibm.jazz.repository.web.admin.doc/topics/c_license_mgmt_over.html}Developer Client Access License}}.  
+   10 developer licenses are available for free from {{http://jazz.net/}}.
+
+* SCM URL
+
+ <<<scm:jazz:[username[;password]@]http[s]://server_name[:port]/jazzPath:repositoryWorkspace>>>
+ 
+ * <username;password> May be provided directly in the pom, or using the server_name:port to obtain
+ the details from the user's settings.xml file.
+ 
+ * http[s]://server_name:port/jazzPath Specify the jazz server and path to connect to.
+     
+ * <repositoryWorkspace> The name of the user's remote repository workspace used to checkin to, or load from.
+
+ []
+
++-------
+scm:jazz:[username[;password]@]http[s]://server_name[:port]/jazzPath:repositoryWorkspace
++-------
+
+* Examples
+
+-------
+scm:jazz:username;password@https://server.name:9443/jazz:Chris's Repository Workspace
+-------
+
+-------
+scm:jazz:https://server.name:9443/jazz:Chris's Repository Workspace
+-------
+
+-------
+scm:jazz:https://server.name:9443/ccm:GPDBBuildWorkspace
+-------
+
+* Jazz SCM Concepts and Artefacts
+
+  This provider only interacts with Jazz SCM, not all of the full capabilities of the full
+  Jazz Server. This implementation is basically a wrapper for the Jazz SCM CLI tool, <<<scm>>>,
+  and as such it is limited to the functionality provided by the underlying <<<scm>>> tool.
+  
+  There are many artifacts and concepts in Jazz SCM. Many of these artifacts and concepts are
+  substantially different than how many other SCM providers work. 
+  
+  We need some way to address these when we try to map the given maven-scm framework to Jazz SCM.
+  Below is a list of these "artifacts / concepts" and roughly how they relate to the maven-scm framework.
+
+    * Local Workspace
+    
+          * This corresponds to fileSet.getBasedir() and is the "baseDirectory" in which the SCM goals are performed against.
+
+    * Url Path (ex: https://localhost)
+    
+          * This must be specified in the "SCM URL" of the pom.xml.
+          
+          * It's value will be stored in our implementation of the ScmProviderRepositoryWithHost.java.
+
+    * Port (ex: 9443)
+    
+          * This must be specified in the "SCM URL" of the pom.xml.
+          
+          * It's value will be stored in our implementation of the ScmProviderRepositoryWithHost.java.
+
+    * Jazz Path (ex: /jazz)
+    
+          * This must be specified in the "SCM URL" of the pom.xml.
+          
+          * It's value will be stored in our implementation of the ScmProviderRepositoryWithHost.java.
+
+    * Repository Workspace
+    
+          * This must be specified in the "SCM URL" of the pom.xml.
+          
+          * It's value will be stored in our implementation of the ScmProviderRepositoryWithHost.java.
+
+    * Username
+    
+          * This may be specified in the "SCM URL" of the pom.xml.
+          
+          * If not specified in the pom.xml, the username must be specified in a server entry of settings.xml.
+          
+          * It's value will be stored in our implementation of the ScmProviderRepositoryWithHost.java.
+
+    * Password
+    
+          * This may be specified in the "SCM URL" of the pom.xml.
+          
+          * If not specified in the pom.xml, the username must be specified in a server entry of settings.xml.
+          
+          * It's value will be stored in our implementation of the ScmProviderRepositoryWithHost.java
+
+    * Components
+    
+          * There is currently no concept of individual components in our implementation, or specifying them,
+            they are implicitly obtained from the repository workspace.
+          
+          * Scm goals are currently assumed to be against all components in the repository workspace.
+
+    * Baselines
+    
+          * Since we don't distinguish components, we do not use the concept of baselines.
+
+    * Snapshots
+    
+          * We can use snapshots because we have a repository workspace defined in the SCM URL.
+          
+          * We assume that ScmVersion.getName() will correspond to a snapshot name.
+
+    * Streams
+    
+          * We currently do not support the concept of streams in our provider.
+
+    * Project Areas
+    
+          * We currently do not support the concept of project areas in our provider.
+
+    * Team Areas
+    
+          * We currently do not support the concept of team areas in our provider.
+
+    * Multiple Outgoing Change Sets
+    
+          * The SCM add operation performs a checkin, but it does not create a new change set.
+          
+          * The SCM checkin operation creates a new changeset, with the given comment and then checks the files in.
+ 
+    * Delivering Change Sets
+    
+          * Changes are delivered/promoted as controlled by the <<<pushChanges>>> flag when we have a valid flow target.
+
+    * Discarding Change Sets
+    
+          * We currently do not support the concept of discarding change sets in our provider. 

Propchange: maven/scm/trunk/src/site/apt/jazz.apt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/src/site/apt/jazz.apt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/src/site/site.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/site.xml?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/src/site/site.xml (original)
+++ maven/scm/trunk/src/site/site.xml Mon Apr 23 07:45:33 2012
@@ -56,6 +56,7 @@
         <item name="CM Synergy" href="/synergy.html"/>
         <item name="CVS" href="/cvs.html"/>
         <item name="Git" href="/git.html"/>
+        <item name="Jazz" href="/jazz.html"/>
         <item name="Local" href="/local.html"/>
         <item name="Perforce" href="/perforce.html"/>
         <item name="StarTeam" href="/starteam.html"/>

Modified: maven/scm/trunk/src/site/xdoc/matrix.xml
URL: http://svn.apache.org/viewvc/maven/scm/trunk/src/site/xdoc/matrix.xml?rev=1329106&r1=1329105&r2=1329106&view=diff
==============================================================================
--- maven/scm/trunk/src/site/xdoc/matrix.xml (original)
+++ maven/scm/trunk/src/site/xdoc/matrix.xml Mon Apr 23 07:45:33 2012
@@ -27,7 +27,7 @@ under the License.
 
   <body>
     <section name="Maven SCM Providers Matrix">
-      <p>This matrix presents all SCM providers acutally supported by the Maven SCM project.</p>
+      <p>This matrix presents all SCM providers actually supported by the Maven SCM project.</p>
       <table>
         <tbody>
           <tr>
@@ -51,704 +51,1010 @@ under the License.
             <th> Pure Java </th>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Bazaar </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Clearcase </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> CM Synergy </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> CVS </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> CVS (Pure Java client) </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/check.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> GIT </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
+            <td> Jazz </td>
+            <td>
+              <!-- add -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- blame -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- branch -->
+              <img src="./images/error.gif" />
+            </td>
+            <td>
+              <!-- changelog -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- checkin -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- checkout -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- diff -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- edit -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- export -->
+              <img src="./images/forbidden.gif" />
+            </td>
+            <td>
+              <!-- list -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- login -->
+              <img src="./images/error.gif" />
+            </td>
+            <td>
+              <!-- remove -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- status -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- tag -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- unedit -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- update -->
+              <img src="./images/check.gif" />
+            </td>
+            <td>
+              <!-- Pure Java -->
+              <img src="./images/error.gif" />
+            </td>
+          </tr>
+          <tr>
+            <!-- SCM -->
             <td> Local </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/check.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Mercurial (hg) </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Microsoft TFS </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Microsoft VSS </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Perforce </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Starteam </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/error.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>
           <tr>
+            <!-- SCM -->
             <td> Subversion </td>
             <td>
+              <!-- add -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- blame -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- branch -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- changelog -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkin -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- checkout -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- diff -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- edit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- export -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- list -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- login -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- remove -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- status -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- tag -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- unedit -->
               <img src="./images/forbidden.gif" />
             </td>
             <td>
+              <!-- update -->
               <img src="./images/check.gif" />
             </td>
             <td>
+              <!-- Pure Java -->
               <img src="./images/error.gif" />
             </td>
           </tr>