Changeset 680

Show
Ignore:
Timestamp:
11/22/06 21:42:23 (4 years ago)
Author:
michi
Message:

worked on source abstraction layer

Location:
Jupe
Files:
1 added
5 modified

Legend:

Unmodified
Added
Removed
  • Jupe/src/org/jupe/plugin/JupePlugin.java

    r673 r680  
    2828import org.eclipse.jface.resource.ImageDescriptor; 
    2929import org.eclipse.jface.resource.ImageRegistry; 
     30import org.eclipse.swt.widgets.Shell; 
    3031import org.eclipse.ui.plugin.AbstractUIPlugin; 
    3132import org.eclipse.uml2.uml.Model; 
     
    427428                return null; 
    428429        } 
    429  
     430         
    430431} 
  • Jupe/src/org/jupe/source/java/JavaPackage.java

    r679 r680  
    44package org.jupe.source.java; 
    55 
     6import org.eclipse.jdt.core.IJavaElement; 
     7import org.eclipse.jdt.core.IPackageFragment; 
     8import org.eclipse.jdt.core.JavaModelException; 
     9import org.eclipse.jdt.ui.refactoring.RenameSupport; 
     10import org.eclipse.ui.IWorkbenchWindow; 
     11import org.jupe.plugin.JupePlugin; 
     12import org.jupe.plugin.exceptions.JupeExceptionLogOnly; 
    613import org.jupe.source.ISourceClass; 
    714import org.jupe.source.ISourcePackage; 
     
    1017/** 
    1118 * @author Michael Pradel 
    12  * 
     19 *  
    1320 */ 
    14 public class JavaPackage implements ISourcePackage { 
     21public class JavaPackage extends AbstractJavaElement implements ISourcePackage { 
    1522 
    16         /* (non-Javadoc) 
     23        private String absoluteName; 
     24 
     25        protected JavaPackage(JavaSource javaSource, String absoluteName) { 
     26                super(javaSource); 
     27                this.absoluteName = absoluteName; 
     28        } 
     29 
     30        /* 
     31         * (non-Javadoc) 
     32         *  
    1733         * @see org.jupe.source.ISourcePackage#createClass(java.lang.String) 
    1834         */ 
     
    2238        } 
    2339 
    24         /* (non-Javadoc) 
     40        /* 
     41         * (non-Javadoc) 
     42         *  
    2543         * @see org.jupe.source.ISourcePackage#createInterface(java.lang.String) 
    2644         */ 
     
    3048        } 
    3149 
    32         /* (non-Javadoc) 
     50        /* 
     51         * (non-Javadoc) 
     52         *  
    3353         * @see org.jupe.source.ISourcePackage#createPackage(java.lang.String) 
    3454         */ 
    3555        public ISourcePackage createPackage(String name) { 
    36                 // TODO Auto-generated method stub 
    37                 return null; 
     56                if (name == null || name.equals("")) { 
     57                        throw new IllegalArgumentException("name cannot be " + name); 
     58                } 
     59 
     60                StringBuffer newName = new StringBuffer(getPackageFragment() 
     61                                .getElementName()); 
     62                newName.append("."); 
     63                newName.append(name); 
     64                try { 
     65                        getSourceFolder().createPackageFragment(newName.toString(), true, 
     66                                        null); 
     67                } catch (JavaModelException e) { 
     68                        throw new JupeExceptionLogOnly("problem while creating package " 
     69                                        + newName.toString() + " in " + " : " + e.toString()); 
     70                } 
     71                return new JavaPackage(javaSource, newName.toString()); 
    3872        } 
    3973 
    40         /* (non-Javadoc) 
     74        /* 
     75         * (non-Javadoc) 
     76         *  
    4177         * @see org.jupe.source.ISourcePackage#deletePackage(java.lang.String) 
    4278         */ 
     
    4682        } 
    4783 
    48         /* (non-Javadoc) 
     84        /* 
     85         * (non-Javadoc) 
     86         *  
    4987         * @see org.jupe.source.ISourcePackage#deleteType(java.lang.String) 
    5088         */ 
     
    5492        } 
    5593 
    56         /* (non-Javadoc) 
     94        /* 
     95         * (non-Javadoc) 
     96         *  
    5797         * @see org.jupe.source.ISourcePackage#getName() 
    5898         */ 
    5999        public String getName() { 
    60                 // TODO Auto-generated method stub 
    61                 return null; 
     100                String[] splitted = absoluteName.split("\\."); 
     101                return splitted[splitted.length - 1]; 
    62102        } 
    63103 
    64         /* (non-Javadoc) 
     104        /* 
     105         * (non-Javadoc) 
     106         *  
    65107         * @see org.jupe.source.ISourcePackage#getPackage(java.lang.String) 
    66108         */ 
     
    70112        } 
    71113 
    72         /* (non-Javadoc) 
     114        /* 
     115         * (non-Javadoc) 
     116         *  
    73117         * @see org.jupe.source.ISourcePackage#getType(java.lang.String) 
    74118         */ 
     
    78122        } 
    79123 
    80         /* (non-Javadoc) 
     124        /* 
     125         * (non-Javadoc) 
     126         *  
    81127         * @see org.jupe.source.ISourcePackage#setName(java.lang.String) 
    82128         */ 
    83129        public void setName(String newName) { 
    84                 // TODO Auto-generated method stub 
     130                if (newName == null || newName.equals("")) { 
     131                        throw new IllegalArgumentException("name cannot be " + newName); 
     132                } 
    85133 
     134                // construct new absolute name 
     135                String[] splitted = absoluteName.split("\\."); 
     136                StringBuffer newAbsoluteName = new StringBuffer(); 
     137                for (int i = 0; i < splitted.length - 1; i++) { 
     138                        String n = splitted[i]; 
     139                        newAbsoluteName.append(n); 
     140                        newAbsoluteName.append("."); 
     141                } 
     142                newAbsoluteName.append(newName); 
     143 
     144                // refactor: rename 
     145                renamePackage(getPackageFragment(), newAbsoluteName.toString()); 
     146                absoluteName = newAbsoluteName.toString(); 
     147        } 
     148 
     149        protected IPackageFragment getPackageFragment() { 
     150                return getSourceFolder().getPackageFragment(absoluteName); 
     151        } 
     152 
     153        // FIXME (Michi) continue here: should not rename package inside this class, 
     154        // but use instances of JavaPackage 
     155 
     156        private void renamePackage(IPackageFragment packageFragment, 
     157                        String newAbsoluteName) { 
     158                String oldAbsoluteName = packageFragment.getElementName(); 
     159                // rename package itself 
     160                try { 
     161                        RenameSupport renameSupport = RenameSupport.create( 
     162                                        getPackageFragment(), newAbsoluteName.toString(), 
     163                                        RenameSupport.UPDATE_GETTER_METHOD 
     164                                                        & RenameSupport.UPDATE_REFERENCES 
     165                                                        & RenameSupport.UPDATE_SETTER_METHOD); 
     166                        IWorkbenchWindow window = JupePlugin.getDefault().getWorkbench() 
     167                                        .getActiveWorkbenchWindow(); 
     168                        renameSupport.perform(window.getShell(), window); 
     169                } catch (Exception e) { 
     170                        throw new JupeExceptionLogOnly("problem while renaming " 
     171                                        + absoluteName + " to " + newAbsoluteName + ": " 
     172                                        + e.toString()); 
     173                } 
     174 
     175                // recursively rename subpackages 
     176                try { 
     177                        IJavaElement[] children = getPackageFragment().getChildren(); 
     178                        for (int i = 0; i < children.length; i++) { 
     179                                IJavaElement javaElement = children[i]; 
     180                                if (javaElement instanceof IPackageFragment) { 
     181                                        String oldSubPkgName = javaElement.getElementName(); 
     182                                        String[] splitted = oldSubPkgName.split("\\."); 
     183                                        StringBuffer newSubPkgName = new StringBuffer(10); 
     184                                        newSubPkgName.append(newAbsoluteName); 
     185                                        newSubPkgName.append(splitted[splitted.length - 1]); 
     186                                        renamePackage((IPackageFragment) javaElement, newSubPkgName 
     187                                                        .toString()); 
     188                                } 
     189                        } 
     190                } catch (JavaModelException e) { 
     191                        throw new JupeExceptionLogOnly( 
     192                                        "problem while renaming subpackages of " + oldAbsoluteName 
     193                                                        + ": " + e.toString()); 
     194                } 
    86195        } 
    87196 
  • Jupe/src/org/jupe/source/java/JavaSource.java

    r679 r680  
    4747import org.jupe.plugin.exceptions.JupeExceptionLogOnly; 
    4848import org.jupe.source.ISource; 
     49import org.jupe.source.ISourceClass; 
     50import org.jupe.source.ISourcePackage; 
     51import org.jupe.source.ISourceType; 
    4952import org.jupe.synchronisation.SyncBlock; 
    5053 
     
    5356 *  
    5457 */ 
    55 public class JavaSource extends JavaPackage implements ISource { 
     58public class JavaSource extends AbstractJavaElement implements ISource { 
    5659 
    5760        public static String javaSourceID = "JavaSource"; 
     
    6164        public JavaSource(final IProject project) { 
    6265                this.workspaceProject = project; 
     66                javaSource = this; 
    6367        } 
    6468 
     
    304308        } 
    305309 
     310        public ISourceClass createClass(String name) { 
     311                // TODO Auto-generated method stub 
     312                return null; 
     313        } 
     314 
     315        public ISourceType createInterface(String name) { 
     316                // TODO Auto-generated method stub 
     317                return null; 
     318        } 
     319 
     320        public ISourcePackage createPackage(String name) { 
     321                try { 
     322                        getSourceFolder().createPackageFragment( 
     323                                        name.toString(), true, null); 
     324                } catch (JavaModelException e) { 
     325                        throw new JupeExceptionLogOnly(e, "problem while creating package in default package " 
     326                                        + name.toString()); 
     327                } 
     328                return new JavaPackage(javaSource, name); 
     329        } 
     330 
     331        public void deletePackage(String name) { 
     332                // TODO Auto-generated method stub 
     333                 
     334        } 
     335 
     336        public void deleteType(String name) { 
     337                // TODO Auto-generated method stub 
     338                 
     339        } 
     340 
     341        public ISourcePackage getPackage(String name) { 
     342                // TODO Auto-generated method stub 
     343                return null; 
     344        } 
     345 
     346        public ISourceType getType(String name) { 
     347                // TODO Auto-generated method stub 
     348                return null; 
     349        } 
     350 
    306351} 
  • Jupe/unittests/org/jupe/source/java/JavaPackageTest.java

    r679 r680  
    33 */ 
    44package org.jupe.source.java; 
     5 
     6import java.lang.reflect.Method; 
    57 
    68import org.eclipse.jdt.core.IPackageFragment; 
     
    2628 
    2729        @Test 
    28         public void testGetName() { 
     30        public void testSetName() throws Exception { 
    2931                assertEquals(initialName, sourcePackage.getName()); 
    3032 
     
    3335 
    3436                assertEquals(newName, sourcePackage.getName()); 
     37                 
     38                // test unexpected arguments 
     39                Method method = JavaPackage.class.getMethod("setName", new Class[] {String.class}); 
     40                testNullArgument(sourcePackage, method); 
     41                testWrongArgument(sourcePackage, method, new Object[] {null}); 
    3542        } 
    3643 
    3744        @Test 
    38         public void testCreatePackage() { 
     45        public void testCreatePackage() throws Exception { 
    3946                assertNotNull(sourcePackage); 
    40                 IPackageFragment realPkg = getSourceFolder().getPackageFragment(initialName); 
     47                IPackageFragment realPkg = getSourceFolder().getPackageFragment( 
     48                                initialName); 
    4149                assertNotNull(realPkg); 
    4250                assertTrue(realPkg.exists()); 
    43                  
     51 
    4452                // create package in package 
    4553                String innerPkgName = "inner"; 
    4654                ISourcePackage innerPkg = sourcePackage.createPackage(innerPkgName); 
    4755                assertNotNull(innerPkg); 
    48                 realPkg = getSourceFolder().getPackageFragment(initialName + "." + innerPkgName); 
     56                realPkg = getSourceFolder().getPackageFragment( 
     57                                initialName + "." + innerPkgName); 
    4958                assertNotNull(realPkg); 
    50                 assertTrue(realPkg.exists());  
     59                assertTrue(realPkg.exists()); 
     60 
     61                // test unusual arguments 
     62                Method method = JavaPackage.class.getMethod("createPackage", 
     63                                new Class[] { String.class }); 
     64                testNullArgument(sourcePackage, method); 
     65                testWrongArgument(sourcePackage, method, new Object[] { "" }); 
     66 
     67                // try to create package a second time -> should have the same name as 
     68                // before 
     69                assertEquals(innerPkg.getName(), sourcePackage.createPackage( 
     70                                innerPkgName).getName()); 
    5171                 
    52                 // FIXME (Michi) continue here... 
     72                // change name of outer package 
     73                String newOuterName = "newOuter"; 
     74                sourcePackage.setName(newOuterName); 
     75                assertEquals(newOuterName, sourcePackage.getName()); 
     76                assertEquals(innerPkgName, innerPkg.getName()); 
     77                realPkg = getSourceFolder().getPackageFragment(newOuterName + "." + innerPkgName); 
     78                assertNotNull(realPkg); 
     79                assertTrue(realPkg.exists()); 
    5380                 
    54                 // test unusual arguments 
    55                  
    56                 // create package a second time 
    57                  
     81                // change name of inner package 
     82                innerPkgName = "newInner"; 
     83                innerPkg.setName(innerPkgName); 
     84                assertEquals(newOuterName, sourcePackage.getName()); 
     85                assertEquals(innerPkgName, innerPkg.getName()); 
     86                realPkg = getSourceFolder().getPackageFragment(newOuterName + "." + innerPkgName); 
     87                assertNotNull(realPkg); 
     88                assertTrue(realPkg.exists()); 
    5889        } 
    5990 
  • Jupe/unittests/org/jupe/unittest/AbstractProjectTestCase.java

    r614 r680  
    2424import java.io.File; 
    2525import java.io.FileInputStream; 
     26import java.lang.reflect.InvocationTargetException; 
     27import java.lang.reflect.Method; 
    2628 
    2729import junit.framework.TestCase; 
     
    6163 
    6264        protected UML2ModelFinder modelFinder; 
    63          
    64         private IEditorPart diagramEditor;       
    65          
     65 
     66        private IEditorPart diagramEditor; 
     67 
    6668        @Override 
    6769        public void setUp() throws Exception { 
     
    7779 
    7880                IEditorInput editorInput = new FileEditorInput(file); 
    79                 diagramEditor = plugin.getWorkbench() 
    80                                 .getActiveWorkbenchWindow().getActivePage().openEditor( 
    81                                                 editorInput, ClassDiagramEditor.ID); 
     81                diagramEditor = plugin.getWorkbench().getActiveWorkbenchWindow() 
     82                                .getActivePage().openEditor(editorInput, ClassDiagramEditor.ID); 
    8283 
    8384                // Is there a more elegant solution? 
     
    101102        public void tearDown() throws Exception { 
    102103                super.tearDown(); 
    103                 plugin.getWorkbench() 
    104                 .getActiveWorkbenchWindow().getActivePage().closeEditor(diagramEditor, false); 
     104                plugin.getWorkbench().getActiveWorkbenchWindow().getActivePage() 
     105                                .closeEditor(diagramEditor, false); 
    105106                plugin.removeJupeProject(jupeProject); 
    106107                testProject.dispose(); 
     
    123124        } 
    124125 
     126        // FIXME comment 
     127        protected void testNullArgument(Object object, Method method) 
     128                        throws Exception { 
     129                Object[] arguments = new Object[method.getParameterTypes().length]; 
     130                for (int i = 0; i < method.getParameterTypes().length; i++) { 
     131                        arguments[i] = null; 
     132                } 
     133                boolean thrown = false; 
     134                try { 
     135                        method.invoke(object, arguments); 
     136                } catch (InvocationTargetException e) { 
     137                        if (e.getTargetException() instanceof IllegalArgumentException) { 
     138                                thrown = true; 
     139                        } 
     140                } 
     141                assertTrue(thrown); 
     142        } 
     143 
     144        // FIXME comment 
     145        protected void testWrongArgument(Object object, Method method, 
     146                        Object[] arguments) throws Exception { 
     147                boolean thrown = false; 
     148                try { 
     149                        method.invoke(object, arguments); 
     150                } catch (InvocationTargetException e) { 
     151                        if (e.getTargetException() instanceof IllegalArgumentException) { 
     152                                thrown = true;   
     153                        } 
     154                } 
     155                assertTrue(thrown); 
     156        } 
     157 
    125158}