1 package org.apache.maven.scm.provider.synergy.command.unedit;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.apache.maven.scm.ScmException;
28 import org.apache.maven.scm.ScmFile;
29 import org.apache.maven.scm.ScmFileSet;
30 import org.apache.maven.scm.ScmFileStatus;
31 import org.apache.maven.scm.ScmResult;
32 import org.apache.maven.scm.command.unedit.AbstractUnEditCommand;
33 import org.apache.maven.scm.command.unedit.UnEditScmResult;
34 import org.apache.maven.scm.provider.ScmProviderRepository;
35 import org.apache.maven.scm.provider.synergy.command.SynergyCommand;
36 import org.apache.maven.scm.provider.synergy.repository.SynergyScmProviderRepository;
37 import org.apache.maven.scm.provider.synergy.util.SynergyUtil;
38 import org.codehaus.plexus.util.FileUtils;
39
40
41
42
43
44 public class SynergyUnEditCommand
45 extends AbstractUnEditCommand
46 implements SynergyCommand
47 {
48
49 protected ScmResult executeUnEditCommand( ScmProviderRepository repository, ScmFileSet fileSet )
50 throws ScmException
51 {
52 if ( getLogger().isDebugEnabled() )
53 {
54 getLogger().debug( "executing unedit command..." );
55 }
56
57 SynergyScmProviderRepository repo = (SynergyScmProviderRepository) repository;
58
59 if ( getLogger().isDebugEnabled() )
60 {
61 getLogger().debug( "basedir: " + fileSet.getBasedir() );
62 }
63
64 String ccmAddr = SynergyUtil.start( getLogger(), repo.getUser(), repo.getPassword(), null );
65
66 try
67 {
68 String projectSpec =
69 SynergyUtil.getWorkingProject( getLogger(), repo.getProjectSpec(), repo.getUser(), ccmAddr );
70 if ( projectSpec == null )
71 {
72 throw new ScmException( "You should checkout a working project first" );
73 }
74 File waPath = SynergyUtil.getWorkArea( getLogger(), projectSpec, ccmAddr );
75 File destPath = new File( waPath, repo.getProjectName() );
76 for ( File f : fileSet.getFileList() )
77 {
78 File source = new File( fileSet.getBasedir(), f.getPath() );
79 File dest = new File( destPath, f.getPath() );
80 SynergyUtil.delete( getLogger(), dest, ccmAddr, true );
81 if ( !source.equals( dest ) )
82 {
83 if ( getLogger().isDebugEnabled() )
84 {
85 getLogger().debug( "Copy file [" + dest + "] to [" + source + "]." );
86 }
87 try
88 {
89 FileUtils.copyFile( dest, source );
90 }
91 catch ( IOException e )
92 {
93 throw new ScmException( "Unable to restore file in output folder", e );
94 }
95 }
96 }
97 }
98 finally
99 {
100 SynergyUtil.stop( getLogger(), ccmAddr );
101 }
102 List<ScmFile> files = new ArrayList<ScmFile>();
103 for ( File f : fileSet.getFileList() )
104 {
105 files.add( new ScmFile( f.getPath(), ScmFileStatus.UNKNOWN ) );
106 }
107 return new UnEditScmResult( "", files );
108 }
109
110 }