Coverage Report - org.apache.maven.scm.provider.synergy.util.SynergyCCM
 
Classes in this File Line Coverage Branch Coverage Complexity
SynergyCCM
94 %
262/277
67 %
47/70
0
 
 1  
 package org.apache.maven.scm.provider.synergy.util;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  * http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import org.apache.maven.scm.ScmException;
 23  
 import org.apache.maven.scm.ScmVersion;
 24  
 import org.codehaus.plexus.util.StringUtils;
 25  
 import org.codehaus.plexus.util.cli.CommandLineUtils;
 26  
 import org.codehaus.plexus.util.cli.Commandline;
 27  
 
 28  
 import java.io.File;
 29  
 import java.io.IOException;
 30  
 import java.util.Calendar;
 31  
 import java.util.Iterator;
 32  
 import java.util.List;
 33  
 import java.util.Properties;
 34  
 
 35  
 /**
 36  
  * This class contains methods to execute Synergy ccm command line.
 37  
  *
 38  
  * @author <a href="mailto:julien.henry@capgemini.com">Julien Henry</a>
 39  
  * @version $Id: SynergyCCM.java 1067549 2011-02-05 23:13:10Z olamy $
 40  
  */
 41  0
 public class SynergyCCM
 42  
 {
 43  
 
 44  
     private static final String CCM = "ccm";
 45  
 
 46  
     private static final String BASELINE = "baseline";
 47  
 
 48  
     private static final String CI = "ci";
 49  
 
 50  
     private static final String CO = "co";
 51  
 
 52  
     private static final String CREATE = "create";
 53  
 
 54  
     private static final String DELETE = "delete";
 55  
 
 56  
     private static final String DELIMITER = "delimiter";
 57  
 
 58  
     private static final String DIR = "dir";
 59  
 
 60  
     private static final String QUERY = "query";
 61  
 
 62  
     private static final String RECONCILE = "rwa";
 63  
 
 64  
     private static final String RECONFIGURE = "reconfigure";
 65  
 
 66  
     private static final String RECONFIGURE_PROPERTIES = "reconfigure_properties";
 67  
 
 68  
     private static final String START = "start";
 69  
 
 70  
     private static final String STOP = "stop";
 71  
 
 72  
     private static final String SYNC = "sync";
 73  
 
 74  
     private static final String TASK = "task";
 75  
 
 76  
     private static final String WA = "wa";
 77  
 
 78  
     /**
 79  
      * Create commandline for getting list of objects in a task.
 80  
      *
 81  
      * @param taskNumber Task number.
 82  
      * @param format     Output format.
 83  
      * @param ccmAddr
 84  
      * @return the commandl ine.
 85  
      * @throws ScmException
 86  
      */
 87  
     public static Commandline showTaskObjects( int taskNumber, String format, String ccmAddr )
 88  
         throws ScmException
 89  
     {
 90  
         // Construct the CM Synergy command
 91  2
         Commandline cl = new Commandline();
 92  
 
 93  2
         configureEnvironment( cl, ccmAddr );
 94  
 
 95  2
         cl.setExecutable( CCM );
 96  
 
 97  2
         cl.createArg().setValue( TASK );
 98  2
         cl.createArg().setValue( "-show" );
 99  2
         cl.createArg().setValue( "objects" );
 100  
 
 101  
         // Set up the output format
 102  2
         if ( format != null && !format.equals( "" ) )
 103  
         {
 104  1
             cl.createArg().setValue( "-f" );
 105  1
             cl.createArg().setValue( format );
 106  
         }
 107  
 
 108  2
         cl.createArg().setValue( Integer.toString( taskNumber ) );
 109  
 
 110  2
         return cl;
 111  
     }
 112  
 
 113  
     /**
 114  
      * Create commandline for query.
 115  
      *
 116  
      * @param query    query.
 117  
      * @param format   Output format
 118  
      * @param ccmAddr
 119  
      * @return the command line.
 120  
      * @throws ScmException
 121  
      */
 122  
     public static Commandline query( String query, String format, String ccmAddr )
 123  
         throws ScmException
 124  
     {
 125  
 
 126  
         // Construct the CM Synergy command
 127  2
         Commandline cl = new Commandline();
 128  
 
 129  2
         configureEnvironment( cl, ccmAddr );
 130  
 
 131  2
         cl.setExecutable( CCM );
 132  2
         cl.createArg().setValue( QUERY );
 133  
 
 134  2
         cl.createArg().setValue( "-u" );
 135  
 
 136  
         // Set up the output format
 137  2
         if ( format != null && !format.equals( "" ) )
 138  
         {
 139  1
             cl.createArg().setValue( "-f" );
 140  1
             cl.createArg().setValue( format );
 141  
         }
 142  
 
 143  2
         cl.createArg().setValue( query );
 144  
 
 145  2
         return cl;
 146  
     }
 147  
 
 148  
     /**
 149  
      * Create command line for creating a baseline.
 150  
      *
 151  
      * @param projectSpec project_name~project_version
 152  
      * @param name        Name of the baseline
 153  
      * @param release     the release.
 154  
      * @param purpose     the purpose.
 155  
      * @param ccmAddr
 156  
      * @return the command line.
 157  
      * @throws ScmException
 158  
      */
 159  
     public static Commandline createBaseline( String projectSpec, String name, String release, String purpose,
 160  
                                               String ccmAddr )
 161  
         throws ScmException
 162  
     {
 163  1
         Commandline cl = new Commandline();
 164  
 
 165  1
         configureEnvironment( cl, ccmAddr );
 166  
 
 167  1
         cl.setExecutable( CCM );
 168  1
         cl.createArg().setValue( BASELINE );
 169  
 
 170  1
         cl.createArg().setValue( "-create" );
 171  1
         cl.createArg().setValue( name );
 172  
 
 173  1
         cl.createArg().setValue( "-p" );
 174  1
         cl.createArg().setValue( projectSpec );
 175  
 
 176  1
         cl.createArg().setValue( "-release" );
 177  1
         cl.createArg().setValue( release );
 178  
 
 179  1
         cl.createArg().setValue( "-purpose" );
 180  1
         cl.createArg().setValue( purpose );
 181  
 
 182  1
         return cl;
 183  
 
 184  
     }
 185  
 
 186  
     /**
 187  
      * Create command line for adding a fileset to a project
 188  
      *
 189  
      * @param files    fileset.
 190  
      * @param message  message log, or null if none.
 191  
      * @param ccmAddr
 192  
      * @return the command line.
 193  
      * @throws ScmException
 194  
      */
 195  
     public static Commandline create( List<File> files, String message, String ccmAddr )
 196  
         throws ScmException
 197  
     {
 198  2
         Commandline cl = new Commandline();
 199  
 
 200  2
         configureEnvironment( cl, ccmAddr );
 201  
 
 202  2
         cl.setExecutable( CCM );
 203  2
         cl.createArg().setValue( CREATE );
 204  
 
 205  2
         if ( message != null && !message.equals( "" ) )
 206  
         {
 207  
 
 208  2
             cl.createArg().setValue( "-c" );
 209  
 
 210  2
             cl.createArg().setValue( message );
 211  
 
 212  
         }
 213  
 
 214  2
         for ( Iterator<File> i = files.iterator(); i.hasNext(); )
 215  
         {
 216  3
             File f = i.next();
 217  
             try
 218  
             {
 219  3
                 cl.createArg().setValue( f.getCanonicalPath() );
 220  
             }
 221  0
             catch ( IOException e )
 222  
             {
 223  0
                 throw new ScmException( "Invalid file path " + f.toString(), e );
 224  3
             }
 225  3
         }
 226  
 
 227  2
         return cl;
 228  
 
 229  
     }
 230  
 
 231  
     /**
 232  
      * Create command line for creating a task
 233  
      *
 234  
      * @param synopsis    synopsis.
 235  
      * @param release     release.
 236  
      * @param defaultTask default.
 237  
      * @param ccmAddr
 238  
      * @return the command line.
 239  
      * @throws ScmException
 240  
      */
 241  
     public static Commandline createTask( String synopsis, String release, boolean defaultTask, String ccmAddr )
 242  
         throws ScmException
 243  
     {
 244  2
         Commandline cl = new Commandline();
 245  
 
 246  2
         configureEnvironment( cl, ccmAddr );
 247  
 
 248  2
         cl.setExecutable( CCM );
 249  2
         cl.createArg().setValue( TASK );
 250  
 
 251  2
         cl.createArg().setValue( "-create" );
 252  
 
 253  2
         cl.createArg().setValue( "-synopsis" );
 254  2
         cl.createArg().setValue( synopsis );
 255  
 
 256  2
         if ( release != null && !release.equals( "" ) )
 257  
         {
 258  1
             cl.createArg().setValue( "-release" );
 259  1
             cl.createArg().setValue( release );
 260  
         }
 261  
 
 262  2
         if ( defaultTask )
 263  
         {
 264  2
             cl.createArg().setValue( "-default" );
 265  
         }
 266  
 
 267  2
         cl.createArg().setValue( "-description" );
 268  2
         cl.createArg().setValue(
 269  
             "This task was created by Maven SCM Synergy provider on " + Calendar.getInstance().getTime() );
 270  
 
 271  2
         return cl;
 272  
 
 273  
     }
 274  
 
 275  
     /**
 276  
      * Create command line for checkin a task
 277  
      *
 278  
      * @param taskSpecs task_specs or default
 279  
      * @param comment    comment.
 280  
      * @param ccmAddr
 281  
      * @return
 282  
      * @throws ScmException
 283  
      */
 284  
     public static Commandline checkinTask( String taskSpecs, String comment, String ccmAddr )
 285  
         throws ScmException
 286  
     {
 287  1
         Commandline cl = new Commandline();
 288  
 
 289  1
         configureEnvironment( cl, ccmAddr );
 290  
 
 291  1
         cl.setExecutable( CCM );
 292  1
         cl.createArg().setValue( TASK );
 293  
 
 294  1
         cl.createArg().setValue( "-checkin" );
 295  
 
 296  1
         cl.createArg().setValue( taskSpecs );
 297  
 
 298  1
         cl.createArg().setValue( "-comment" );
 299  1
         cl.createArg().setValue( comment );
 300  
 
 301  1
         return cl;
 302  
 
 303  
     }
 304  
 
 305  
     /**
 306  
      * Create command line for deleting file(s).
 307  
      *
 308  
      * @param files    fileset.
 309  
      * @param ccmAddr
 310  
      * @param replace  replace with previous version of file ?
 311  
      * @return
 312  
      * @throws ScmException
 313  
      */
 314  
     public static Commandline delete( List<File> files, String ccmAddr, boolean replace )
 315  
         throws ScmException
 316  
     {
 317  2
         Commandline cl = new Commandline();
 318  
 
 319  2
         configureEnvironment( cl, ccmAddr );
 320  
 
 321  2
         cl.setExecutable( CCM );
 322  2
         cl.createArg().setValue( DELETE );
 323  
 
 324  2
         if ( replace )
 325  
         {
 326  1
             cl.createArg().setValue( "-replace" );
 327  
         }
 328  
 
 329  2
         for ( Iterator<File> i = files.iterator(); i.hasNext(); )
 330  
         {
 331  3
             File f = i.next();
 332  
             try
 333  
             {
 334  3
                 cl.createArg().setValue( f.getCanonicalPath() );
 335  
             }
 336  0
             catch ( IOException e )
 337  
             {
 338  0
                 throw new ScmException( "Invalid file path " + f.toString(), e );
 339  3
             }
 340  3
         }
 341  
 
 342  2
         return cl;
 343  
 
 344  
     }
 345  
 
 346  
     /**
 347  
      * Create commandline to reconfigure a project.
 348  
      *
 349  
      * @param projectSpec
 350  
      * @param ccmAddr
 351  
      * @return the command line.
 352  
      * @throws ScmException
 353  
      */
 354  
     public static Commandline reconfigure( String projectSpec, String ccmAddr )
 355  
         throws ScmException
 356  
     {
 357  1
         Commandline cl = new Commandline();
 358  
 
 359  1
         configureEnvironment( cl, ccmAddr );
 360  
 
 361  1
         cl.setExecutable( CCM );
 362  1
         cl.createArg().setValue( RECONFIGURE );
 363  
 
 364  1
         cl.createArg().setValue( "-recurse" );
 365  
 
 366  1
         if ( projectSpec != null )
 367  
         {
 368  1
             cl.createArg().setValue( "-p" );
 369  1
             cl.createArg().setValue( projectSpec );
 370  
         }
 371  
 
 372  1
         return cl;
 373  
 
 374  
     }
 375  
 
 376  
     /**
 377  
      * Create commandline to reconfigure properties of a project.
 378  
      *
 379  
      * @param projectSpec
 380  
      * @param ccmAddr
 381  
      * @return
 382  
      * @throws ScmException
 383  
      */
 384  
     public static Commandline reconfigureProperties( String projectSpec, String ccmAddr )
 385  
         throws ScmException
 386  
     {
 387  1
         Commandline cl = new Commandline();
 388  
 
 389  1
         configureEnvironment( cl, ccmAddr );
 390  
 
 391  1
         cl.setExecutable( CCM );
 392  1
         cl.createArg().setValue( RECONFIGURE_PROPERTIES );
 393  
 
 394  1
         cl.createArg().setValue( "-refresh" );
 395  1
         cl.createArg().setValue( projectSpec );
 396  
 
 397  1
         return cl;
 398  
 
 399  
     }
 400  
 
 401  
     /**
 402  
      * Create command line to reconcile a project with uwa option.
 403  
      *
 404  
      * @param projectSpec
 405  
      * @param ccmAddr
 406  
      * @return
 407  
      * @throws ScmException
 408  
      */
 409  
     public static Commandline reconcileUwa( String projectSpec, String ccmAddr )
 410  
         throws ScmException
 411  
     {
 412  2
         Commandline cl = new Commandline();
 413  
 
 414  2
         configureEnvironment( cl, ccmAddr );
 415  
 
 416  2
         cl.setExecutable( CCM );
 417  2
         cl.createArg().setValue( RECONCILE );
 418  
 
 419  2
         cl.createArg().setValue( "-r" );
 420  2
         cl.createArg().setValue( "-uwa" ); // Update wa from database
 421  
 
 422  2
         if ( projectSpec != null )
 423  
         {
 424  1
             cl.createArg().setValue( "-p" );
 425  1
             cl.createArg().setValue( projectSpec );
 426  
         }
 427  
 
 428  2
         return cl;
 429  
 
 430  
     }
 431  
 
 432  
     /**
 433  
      * Create command line to reconcile a project with udb option.
 434  
      *
 435  
      * @param projectSpec
 436  
      * @param ccmAddr
 437  
      * @return
 438  
      * @throws ScmException
 439  
      */
 440  
     public static Commandline reconcileUdb( String projectSpec, String ccmAddr )
 441  
         throws ScmException
 442  
     {
 443  2
         Commandline cl = new Commandline();
 444  
 
 445  2
         configureEnvironment( cl, ccmAddr );
 446  
 
 447  2
         cl.setExecutable( CCM );
 448  2
         cl.createArg().setValue( RECONCILE );
 449  
 
 450  2
         cl.createArg().setValue( "-r" );
 451  2
         cl.createArg().setValue( "-udb" ); // Update database from wa
 452  
 
 453  2
         if ( projectSpec != null )
 454  
         {
 455  1
             cl.createArg().setValue( "-p" );
 456  1
             cl.createArg().setValue( projectSpec );
 457  
         }
 458  
 
 459  2
         return cl;
 460  
 
 461  
     }
 462  
 
 463  
     /**
 464  
      * Create command line to perform a dir on the directory.
 465  
      *
 466  
      * @param directory
 467  
      * @param format    Output format.
 468  
      * @param ccmAddr
 469  
      * @return
 470  
      * @throws ScmException
 471  
      */
 472  
     public static Commandline dir( File directory, String format, String ccmAddr )
 473  
         throws ScmException
 474  
     {
 475  1
         Commandline cl = new Commandline();
 476  
 
 477  1
         configureEnvironment( cl, ccmAddr );
 478  
 
 479  
         try
 480  
         {
 481  1
             cl.setWorkingDirectory( directory.getCanonicalPath() );
 482  
         }
 483  0
         catch ( IOException e )
 484  
         {
 485  0
             throw new ScmException( "Invalid directory", e );
 486  1
         }
 487  
 
 488  1
         cl.setExecutable( CCM );
 489  1
         cl.createArg().setValue( DIR );
 490  1
         cl.createArg().setValue( "-m" );
 491  
 
 492  
         // Set up the output format
 493  1
         if ( format != null && !format.equals( "" ) )
 494  
         {
 495  1
             cl.createArg().setValue( "-f" );
 496  1
             cl.createArg().setValue( format );
 497  
         }
 498  
 
 499  1
         return cl;
 500  
 
 501  
     }
 502  
 
 503  
     /**
 504  
      * Create commandline to checkout a fileset.
 505  
      *
 506  
      * @param files    fileset.
 507  
      * @param ccmAddr
 508  
      * @return the command line.
 509  
      * @throws ScmException
 510  
      */
 511  
     public static Commandline checkoutFiles( List<File> files, String ccmAddr )
 512  
         throws ScmException
 513  
     {
 514  2
         Commandline cl = new Commandline();
 515  
 
 516  2
         configureEnvironment( cl, ccmAddr );
 517  
 
 518  2
         cl.setExecutable( CCM );
 519  2
         cl.createArg().setValue( CO );
 520  
 
 521  2
         for ( Iterator<File> i = files.iterator(); i.hasNext(); )
 522  
         {
 523  3
             File f = i.next();
 524  
             try
 525  
             {
 526  3
                 cl.createArg().setValue( f.getCanonicalPath() );
 527  
             }
 528  0
             catch ( IOException e )
 529  
             {
 530  0
                 throw new ScmException( "Invalid file path " + f.toString(), e );
 531  3
             }
 532  3
         }
 533  
 
 534  2
         return cl;
 535  
     }
 536  
 
 537  
     /**
 538  
      * Create commandline to checkout a project
 539  
      *
 540  
      * @param directory    target WA, or null if using default directory
 541  
      * @param projectSpec
 542  
      * @param version      new version of the project, or null if using default Synergy
 543  
      *                     mecanism
 544  
      * @param ccmAddr
 545  
      * @return
 546  
      * @throws ScmException
 547  
      */
 548  
     public static Commandline checkoutProject( File directory, String projectSpec, ScmVersion version, String purpose,
 549  
                                                String release, String ccmAddr )
 550  
         throws ScmException
 551  
     {
 552  2
         Commandline cl = new Commandline();
 553  
 
 554  2
         configureEnvironment( cl, ccmAddr );
 555  
 
 556  2
         cl.setExecutable( CCM );
 557  2
         cl.createArg().setValue( CO );
 558  2
         cl.createArg().setValue( "-subprojects" ); // Checkout sub-projects
 559  2
         cl.createArg().setValue( "-rel" ); // Relative
 560  
 
 561  2
         if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
 562  
         {
 563  2
             cl.createArg().setValue( "-t" ); // Version
 564  2
             cl.createArg().setValue( version.getName() );
 565  
         }
 566  
 
 567  2
         if ( purpose != null && !purpose.equals( "" ) )
 568  
         {
 569  2
             cl.createArg().setValue( "-purpose" );
 570  2
             cl.createArg().setValue( purpose );
 571  
         }
 572  
 
 573  2
         if ( release != null && !release.equals( "" ) )
 574  
         {
 575  2
             cl.createArg().setValue( "-release" );
 576  2
             cl.createArg().setValue( release );
 577  
         }
 578  
 
 579  2
         if ( directory != null )
 580  
         {
 581  1
             cl.createArg().setValue( "-path" );
 582  
             try
 583  
             {
 584  1
                 cl.createArg().setValue( directory.getCanonicalPath() );
 585  
             }
 586  0
             catch ( IOException e )
 587  
             {
 588  0
                 throw new ScmException( "Invalid directory", e );
 589  1
             }
 590  
         }
 591  2
         cl.createArg().setValue( "-p" );
 592  2
         cl.createArg().setValue( projectSpec );
 593  
 
 594  2
         return cl;
 595  
     }
 596  
 
 597  
     /**
 598  
      * Create commandline to checkin a project
 599  
      *
 600  
      * @param projectSpec
 601  
      * @param comment
 602  
      * @param ccmAddr
 603  
      * @return
 604  
      * @throws ScmException
 605  
      */
 606  
     public static Commandline checkinProject( String projectSpec, String comment, String ccmAddr )
 607  
         throws ScmException
 608  
     {
 609  1
         Commandline cl = new Commandline();
 610  
 
 611  1
         configureEnvironment( cl, ccmAddr );
 612  
 
 613  1
         cl.setExecutable( CCM );
 614  1
         cl.createArg().setValue( CI );
 615  1
         if ( comment != null && !comment.equals( "" ) )
 616  
         {
 617  1
             cl.createArg().setValue( "-c" );
 618  1
             cl.createArg().setValue( comment );
 619  
         }
 620  1
         cl.createArg().setValue( "-p" );
 621  1
         cl.createArg().setValue( projectSpec );
 622  
 
 623  1
         return cl;
 624  
     }
 625  
 
 626  
     /**
 627  
      * Create commandline to checkin a fileset
 628  
      *
 629  
      * @param files    fileset.
 630  
      * @param comment
 631  
      * @param ccmAddr
 632  
      * @return
 633  
      * @throws ScmException
 634  
      */
 635  
     public static Commandline checkinFiles( List<File> files, String comment, String ccmAddr )
 636  
         throws ScmException
 637  
     {
 638  2
         Commandline cl = new Commandline();
 639  
 
 640  2
         configureEnvironment( cl, ccmAddr );
 641  
 
 642  2
         cl.setExecutable( CCM );
 643  2
         cl.createArg().setValue( CI );
 644  2
         if ( comment != null && !comment.equals( "" ) )
 645  
         {
 646  2
             cl.createArg().setValue( "-c" );
 647  2
             cl.createArg().setValue( comment );
 648  
         }
 649  
 
 650  2
         if ( files.size() > 0 )
 651  
         {
 652  2
             for ( Iterator<File> i = files.iterator(); i.hasNext(); )
 653  
             {
 654  3
                 File f = i.next();
 655  
                 try
 656  
                 {
 657  3
                     cl.createArg().setValue( f.getCanonicalPath() );
 658  
                 }
 659  0
                 catch ( IOException e )
 660  
                 {
 661  0
                     throw new ScmException( "Invalid file path " + f.toString(), e );
 662  3
                 }
 663  3
             }
 664  
         }
 665  2
         return cl;
 666  
     }
 667  
 
 668  
     /**
 669  
      * Create commandline to synchronize a project
 670  
      *
 671  
      * @param projectSpec
 672  
      * @param ccmAddr
 673  
      * @return
 674  
      * @throws ScmException
 675  
      */
 676  
     public static Commandline synchronize( String projectSpec, String ccmAddr )
 677  
         throws ScmException
 678  
     {
 679  1
         Commandline cl = new Commandline();
 680  
 
 681  1
         configureEnvironment( cl, ccmAddr );
 682  
 
 683  1
         cl.setExecutable( CCM );
 684  1
         cl.createArg().setValue( SYNC );
 685  1
         cl.createArg().setValue( "-r" ); // Recursive
 686  1
         cl.createArg().setValue( "-p" );
 687  1
         cl.createArg().setValue( projectSpec );
 688  
 
 689  1
         return cl;
 690  
     }
 691  
 
 692  
     /**
 693  
      * Create commandline to get workarea informations for a given project.
 694  
      *
 695  
      * @param projectSpec
 696  
      * @param ccmAddr
 697  
      * @return
 698  
      * @throws ScmException
 699  
      */
 700  
     public static Commandline showWorkArea( String projectSpec, String ccmAddr )
 701  
         throws ScmException
 702  
     {
 703  1
         Commandline cl = new Commandline();
 704  
 
 705  1
         configureEnvironment( cl, ccmAddr );
 706  
 
 707  1
         cl.setExecutable( CCM );
 708  1
         cl.createArg().setValue( WA );
 709  1
         cl.createArg().setValue( "-show" );
 710  1
         cl.createArg().setValue( projectSpec );
 711  
 
 712  1
         return cl;
 713  
     }
 714  
 
 715  
     /**
 716  
      * Create commandline to stop a Synergy session
 717  
      *
 718  
      * @param ccmAddr
 719  
      * @return
 720  
      * @throws ScmException
 721  
      */
 722  
     public static Commandline stop( String ccmAddr )
 723  
         throws ScmException
 724  
     {
 725  1
         Commandline cl = new Commandline();
 726  
 
 727  1
         configureEnvironment( cl, ccmAddr );
 728  
 
 729  1
         cl.setExecutable( CCM );
 730  1
         cl.createArg().setValue( STOP );
 731  
 
 732  1
         return cl;
 733  
     }
 734  
 
 735  
     /**
 736  
      * Configure a commandline to use environement variables ($PATH)
 737  
      *
 738  
      * @param cl
 739  
      * @param ccmAddr
 740  
      * @throws ScmException
 741  
      */
 742  
     private static void configureEnvironment( Commandline cl, String ccmAddr )
 743  
         throws ScmException
 744  
     {
 745  
         // We need PATH to be set for using CCM
 746  
         try
 747  
         {
 748  32
             Properties envVars = CommandLineUtils.getSystemEnvVars();
 749  
 
 750  
             for ( @SuppressWarnings( "rawtypes" )
 751  32
             Iterator i = envVars.keySet().iterator(); i.hasNext(); )
 752  
             {
 753  992
                 String key = (String) i.next();
 754  
 
 755  992
                 if ( !key.equalsIgnoreCase( "CCM_ADDR" ) )
 756  
                 {
 757  
 
 758  992
                     cl.addEnvironment( key, envVars.getProperty( key ) );
 759  
 
 760  
                 }
 761  992
             }
 762  
         }
 763  0
         catch ( Exception e1 )
 764  
         {
 765  0
             throw new ScmException( "Fail to add PATH environment variable.", e1 );
 766  
 
 767  32
         }
 768  32
         cl.addEnvironment( "CCM_ADDR", ccmAddr );
 769  
 
 770  32
     }
 771  
 
 772  
     /**
 773  
      * Create commandline to start a Synergy session
 774  
      *
 775  
      * @param username
 776  
      * @param password
 777  
      * @param role
 778  
      * @return
 779  
      * @throws ScmException
 780  
      */
 781  
     public static Commandline start( String username, String password, SynergyRole role )
 782  
         throws ScmException
 783  
     {
 784  1
         Commandline cl = new Commandline();
 785  
 
 786  1
         cl.setExecutable( CCM );
 787  1
         cl.createArg().setValue( START );
 788  1
         cl.createArg().setValue( "-nogui" );
 789  1
         cl.createArg().setValue( "-m" ); // Multissesion
 790  1
         cl.createArg().setValue( "-q" ); // Quiet (return only CCM_ADDR)
 791  1
         cl.createArg().setValue( "-n" );
 792  1
         cl.createArg().setValue( username );
 793  1
         cl.createArg().setValue( "-pw" );
 794  1
         cl.createArg().setValue( password );
 795  1
         if ( role != null )
 796  
         {
 797  1
             cl.createArg().setValue( "-r" );
 798  1
             cl.createArg().setValue( role.toString() );
 799  
         }
 800  
 
 801  1
         return cl;
 802  
     }
 803  
 
 804  
     /**
 805  
      * Create commandline to start a  remote Synergy session
 806  
      *
 807  
      * @param username
 808  
      * @param password
 809  
      * @param role
 810  
      * @return
 811  
      * @throws ScmException
 812  
      */
 813  
     public static Commandline startRemote( String username, String password, SynergyRole role )
 814  
         throws ScmException
 815  
     {
 816  1
         Commandline cl = new Commandline();
 817  
 
 818  1
         cl.setExecutable( CCM );
 819  1
         cl.createArg().setValue( START );
 820  1
         cl.createArg().setValue( "-nogui" );
 821  1
         cl.createArg().setValue( "-m" ); // Multissesion
 822  1
         cl.createArg().setValue( "-q" ); // Quiet (return only CCM_ADDR)
 823  1
         cl.createArg().setValue( "-rc" ); //Remote client
 824  1
         cl.createArg().setValue( "-n" );
 825  1
         cl.createArg().setValue( username );
 826  1
         cl.createArg().setValue( "-pw" );
 827  1
         cl.createArg().setValue( password );
 828  1
         if ( role != null )
 829  
         {
 830  1
             cl.createArg().setValue( "-r" );
 831  1
             cl.createArg().setValue( role.toString() );
 832  
         }
 833  
 
 834  1
         return cl;
 835  
     }
 836  
         
 837  
     /**
 838  
      * Create commandline to get Synergy database delimiter
 839  
      *
 840  
      * @return
 841  
      * @throws ScmException
 842  
      */
 843  
     public static Commandline delimiter( String ccmAddr )
 844  
         throws ScmException
 845  
     {
 846  1
         Commandline cl = new Commandline();
 847  
 
 848  1
         configureEnvironment( cl, ccmAddr );
 849  
 
 850  1
         cl.setExecutable( CCM );
 851  1
         cl.createArg().setValue( DELIMITER );
 852  
 
 853  1
         return cl;
 854  
     }
 855  
     
 856  
     /**
 857  
      * Create commandline to get current (i.e. default) task
 858  
      * 
 859  
      * @param ccmAddr current Synergy session ID
 860  
      * @return 
 861  
      * @throws ScmException
 862  
      */
 863  
     public static Commandline showDefaultTask( String ccmAddr ) 
 864  
             throws ScmException
 865  
     {
 866  1
             Commandline cl = new Commandline();
 867  
 
 868  1
         configureEnvironment( cl, ccmAddr );
 869  1
         cl.setExecutable( CCM );
 870  1
         cl.createArg().setValue( TASK );
 871  1
         cl.createArg().setValue( "-default" );
 872  
         
 873  1
         return cl;
 874  
     }
 875  
     
 876  
     /**
 877  
      * Create commandline to set current (i.e. default) task
 878  
      * 
 879  
      * @param task          the number of the task to set as current task
 880  
      * @param ccmAddr current Synergy session ID
 881  
      * @return 
 882  
      * @throws ScmException
 883  
      */
 884  
     public static Commandline setDefaultTask( int task, String ccmAddr ) 
 885  
             throws ScmException
 886  
     {
 887  1
             Commandline cl = new Commandline();
 888  
 
 889  1
         configureEnvironment( cl, ccmAddr );
 890  1
         cl.setExecutable( CCM );
 891  1
         cl.createArg().setValue( TASK );
 892  1
         cl.createArg().setValue( "-default" );
 893  1
         cl.createArg().setValue( String.valueOf( task ) );
 894  1
         return cl;
 895  
     }
 896  
 }