001    package plugins.JavaRolePluginModule;
002    
003    import java.util.Vector;
004    /**
005       @version 0.1+
006    
007       Transformationer:
008       1. Bygg om Entity till att enbart hantera start- och slutposition eftersom
009       det måste vara möjligt att ersätta enbart kommentarer i ett block
010       2. Lägg till typen Semicolon för att kunna lägga in ett ensamt semikolon!
011       3. Omforma Class, ClassWithBody och EndOfClass till ClassHead, ClassBody och EndOfClassBody
012       4. Lägg till typen DocComment
013       5. Lägg till typen EndOfFile
014       6. Spjälka Method i MethodHead och MethodBody
015       7. Antalet olika typer blir 12
016    
017       Förslag:
018       1. Bygga om classhead och classbody till class som innehåller huvudet
019       själva klasskroppen är barnen.
020       2. Flytta utvalda metoder till JavaParseTree.
021       3. Gör en "tätare" och ner avskalad Entity!
022    
023       Problem:
024    
025    */
026    public class Entity {
027      public static final int UNKNOWN=0;
028      public static final int FILE=1;
029      public static final int ENDOFFILE=2;
030      public static final int CLASSHEAD=3;
031      public static final int CLASSBODY=4;
032      public static final int ENDOFCLASSBODY=5; //set when } is found
033      public static final int METHODHEAD=6;
034      public static final int METHODBODY=7;
035      public static final int VARIABLE=8;
036      public static final int DOCCOMMENT=9;
037      public static final int SEMICOLON=10;
038      public static final int EXTRA=11;
039      public static final int SYNTAXERROR=12;
040    
041      private Entity parent;
042      private Vector children=new Vector();
043      private int currentChild;
044    
045      public String file;
046    
047      public int type=UNKNOWN;
048      public int startPos=-1;
049      public int endPos=-1;
050      public int contentStartPos=-1;
051    
052      public Entity(String file) {
053        this.file=file;
054      }
055    
056      public Entity getParent() {
057        return parent;
058      }
059    
060      public void setParent(Entity parent) {
061        this.parent=parent;
062      }
063    
064      public void addChild(Entity subEntity) {
065        subEntity.setParent(this);
066        children.add(subEntity);
067      }
068      
069      public void insertChildBefore(Entity subEntity) {
070        subEntity.setParent(this);
071        children.add(currentChild,subEntity);
072        currentChild++;    
073      }
074    
075      /*
076      public void insertChildAfter(Entity e) {
077        e.setParent(this);
078        children.add(currentChild+1,e);
079      }
080      */
081    
082      public Entity removeCurrentChildAndGetPrevious() {
083        children.remove(currentChild);
084        currentChild--;
085        if(currentChild>=0) {
086          return (Entity) children.elementAt(currentChild);
087        } else {
088          return null;
089        }
090      }
091      
092    
093      public Entity removeCurrentChildAndGetNext() {
094        children.remove(currentChild);
095        if(currentChild < children.size()) {
096          return (Entity) children.elementAt(currentChild);
097        } else {
098          return null;
099        }
100      }
101    
102      public Entity getFirstChild() {
103        currentChild=0;
104        if(currentChild<children.size()) {
105          return (Entity) children.elementAt(currentChild);
106        } else {
107          return null;
108        }
109      }
110    
111      public Entity getLastChild() {
112        currentChild=children.size()-1;
113        if(currentChild>=0) {
114          return (Entity) children.elementAt(currentChild);
115        } else {
116          return null;
117        }
118      }
119    
120    
121      public Entity getNextChild() {
122        currentChild++;
123        if(currentChild<children.size()) {
124          return (Entity) children.elementAt(currentChild);
125        } else {
126          return null;
127        }
128      }
129    
130      public Entity getPreviousChild() {
131        currentChild--;
132        if(currentChild>=0) {
133          return (Entity) children.elementAt(currentChild);
134        } else {
135          return null;
136        }
137      }
138    
139      public boolean isAtFirstChild() {
140        return currentChild==0;
141      }
142    
143      public String getContent() {
144        if(type==SEMICOLON) {
145          return ";";
146        } else {
147          return file.substring(contentStartPos,endPos);
148        }
149      }
150    
151      public String getContentAndWhitespace() {
152        if(type==SEMICOLON) {
153          return file.substring(startPos,contentStartPos)+";";
154        } else {
155          return file.substring(startPos,endPos);
156        }
157      }
158    }
159    
160    
161    
162    
163    
164