001    package plugins.JavaRolePluginModule;
002    
003    import java.io.*;
004    import sharpster.common.*;
005    import plugins.JavaRolePlugin;
006    
007    public class RMTester {
008        
009        public static void main(String args[]) {
010            if(args.length==1) {
011                ParseTree tree=new ParseTree(new String(readFile(args[0]).getBody().getData()));
012                if(tree.hasSyntaxError()) {
013                  System.out.println("Syntax Error!");
014                } else {
015                  System.out.println(tree.toString());
016                }            
017            } 
018            else if(args.length==3) {
019                JavaRolePlugin rm = new JavaRolePlugin();
020                SharedFile contents = ((SharedFilesResponse)rm.extractParts(readFile(args[0]), args[1]).getResponse(0)).getFiles().getFile(0);
021                writeFile(args[2],contents);
022            }
023            else if(args.length==4) {
024                JavaRolePlugin rm = new JavaRolePlugin();
025                SharedFile contents = ((SharedFilesResponse)rm.mergeParts(readFile(args[0]), readFile(args[1]),args[2]).getResponse(0)).getFiles().getFile(0);
026                writeFile(args[3],contents);
027            }
028            else{
029                System.out.println("Usage:");
030                System.out.println(" To create parse tree:");
031                System.out.println("  java RMTester file");
032                System.out.println(" To extract parts:");
033                System.out.println("  java RMTester filetostrip role resultfile");
034                System.out.println(" To merge parts:");
035                System.out.println("  java RMTester originalfile strippedfile role resultfile");
036            }
037        }
038        
039        private static void writeFile(String fileName, SharedFile contentSF) {
040            try {
041                BufferedWriter bw=new BufferedWriter(new FileWriter(fileName));
042                String contents = new String(contentSF.getBody().getData());            
043                bw.write(contents);
044                bw.close();
045            } catch(IOException e) {
046                System.err.println(e.toString());
047                System.exit(0);
048            }
049        }
050        
051        private static SharedFile readFile(String file) {
052            StringBuffer sb=new StringBuffer();
053            
054            try {
055                BufferedReader br=new BufferedReader(new FileReader(file));
056                char[] chars=new char[1024];
057                int num;
058                while((num=br.read(chars,0,1024))>0) {
059                    sb.append(chars,0,num);
060                }
061                br.close();
062            } catch (IOException e) {
063                System.err.println(e.toString());
064                System.exit(0);
065            }
066            SharedFile sf = new SharedFile();
067            Body body = new Body();
068            
069            body.setData(sb.toString().getBytes());
070            sf.setBody(body);        
071            
072            return sf;
073        }
074        
075        public static void print(Entity entity) {
076            System.out.println("Entity - Type: "+typeToString(entity)+", SPos: "+entity.startPos+", ContentSPos: "+ entity.contentStartPos+", EndPos: "+entity.endPos);
077            //System.out.println("Contents: "+'"'+entity.getContentAndWhitespace()+'"');
078        }
079        
080        private static String typeToString(Entity entity) {
081            switch(entity.type) {
082                case Entity.UNKNOWN:               return "UNKNOWN";
083                case Entity.FILE:                   return "FILE";
084                case Entity.ENDOFFILE:              return "ENDOFFILE";
085                case Entity.CLASSHEAD:              return "CLASSHEAD";
086                case Entity.CLASSBODY:              return "CLASSBODY";
087                case Entity.ENDOFCLASSBODY:return "ENDOFCLASSBODY";
088                case Entity.METHODHEAD:     return "METHODHEAD";
089                case Entity.METHODBODY:     return "METHODBODY";
090                case Entity.VARIABLE:               return "VARIABLE";
091                case Entity.DOCCOMMENT:     return "DOCCOMMENT";
092                case Entity.SEMICOLON:              return "SEMICOLON";
093                case Entity.EXTRA:                  return "EXTRA";
094                case Entity.SYNTAXERROR:    return "SYNTAXERROR";
095            }
096            return "none";
097        }
098    }
099    
100    
101    
102    
103    
104    
105    
106    
107    
108    
109    
110    
111    
112    
113    
114