View | Details | Raw Unified | Return to bug 289767 | Differences between
and this patch

Collapse All | Expand All

(-)META-INF/MANIFEST.MF (-1 / +4 lines)
Lines 40-45 Link Here
40
 org.eclipse.ui.navigator;bundle-version="[3.2.0,4.0.0)",
40
 org.eclipse.ui.navigator;bundle-version="[3.2.0,4.0.0)",
41
 org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
41
 org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
42
 org.eclipse.emf.edit;bundle-version="[2.2.0,3.0.0)",
42
 org.eclipse.emf.edit;bundle-version="[2.2.0,3.0.0)",
43
 org.eclipse.jst.jee.ui;bundle-version="1.0.100"
43
 org.eclipse.jst.jee.ui;bundle-version="1.0.100",
44
 org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)",
45
 org.eclipse.ltk.core.refactoring;bundle-version="[3.2.0,4.0.0)",
46
 org.eclipse.ltk.ui.refactoring;bundle-version="[3.2.0,4.0.0)"
44
Eclipse-LazyStart: true
47
Eclipse-LazyStart: true
45
Bundle-RequiredExecutionEnvironment: J2SE-1.5
48
Bundle-RequiredExecutionEnvironment: J2SE-1.5
(-)icons/full/delete.gif (+5 lines)
Added Link Here
1
GIF89aÕÇ35ôqtôstórtósuØ*/à,4ß,3Ç)0æ6>å6>Å +å09òU`ôckócjóckódkÅ'Æ(Å'Æ ,òT`Å%ñ?Rð?QòHXñHXÔetߜ¨Ê]IÎn^ÊWFÊXFÉXFՈ|ÉPCܦ ÉG>ÉG?ÈG?Ç=9àa[õ?}Ç=:ãROõ€~ô€~ãÄÄÿÿÿ!ù1,|À˜pH,?G˜gTy`DX¨b
2
G¢*,‘\+Ò§ô!½Â%âE¨LªAàd%rXÈÃñHq?
3
4
5
	H1H””E”˜B ¦C0¨C«\B±£B«¹ˆÀÁ1A;
(-)plugin.xml (+30 lines)
Lines 461-465 Link Here
461
        <adapter type="org.eclipse.jdt.core.IJavaElement"/>
461
        <adapter type="org.eclipse.jdt.core.IJavaElement"/>
462
     </factory>
462
     </factory>
463
  </extension>
463
  </extension>
464
  <extension
465
        point="org.eclipse.ui.popupMenus">
466
     <objectContribution
467
           adaptable="true"
468
           id="org.eclipse.jst.servlet.ui.RemoveWebObject"
469
           objectClass="java.lang.Object">
470
        <action
471
              class="org.eclipse.jst.servlet.ui.internal.actions.DeleteWebArtifacts"
472
              enablesFor="+"
473
              icon="icons/full/delete.gif"
474
              id="org.eclipse.jst.servlet.ui.delete.web"
475
              label="Delete"
476
              menubarPath="delete">
477
        </action>
478
        <enablement>
479
				<or>
480
					<instanceof value="org.eclipse.jst.javaee.web.ServletMapping">
481
					</instanceof>
482
					<instanceof value="org.eclipse.jst.javaee.web.Servlet">
483
					</instanceof>
484
					<instanceof value="org.eclipse.jst.javaee.web.Filter">
485
					</instanceof>
486
					<instanceof value="org.eclipse.jst.javaee.web.FilterMapping">
487
					</instanceof>
488
					<instanceof value="org.eclipse.jst.javaee.core.Listener">
489
					</instanceof>
490
				</or>
491
			</enablement>
492
     </objectContribution>
493
  </extension>
464
  
494
  
465
</plugin>
495
</plugin>
(-)servlet_ui/org/eclipse/jst/servlet/ui/internal/actions/DeleteWebArtifacts.java (+272 lines)
Added Link Here
1
package org.eclipse.jst.servlet.ui.internal.actions;
2
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.Iterator;
6
import java.util.List;
7
import java.util.Map;
8
9
import org.eclipse.core.resources.IFile;
10
import org.eclipse.core.resources.IProject;
11
import org.eclipse.core.resources.IResource;
12
import org.eclipse.core.runtime.Path;
13
import org.eclipse.jdt.core.IJavaElement;
14
import org.eclipse.jdt.core.IPackageFragment;
15
import org.eclipse.jdt.core.IType;
16
import org.eclipse.jdt.core.JavaCore;
17
import org.eclipse.jdt.core.JavaModelException;
18
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
19
import org.eclipse.jface.action.IAction;
20
import org.eclipse.jface.dialogs.IDialogConstants;
21
import org.eclipse.jface.viewers.ISelection;
22
import org.eclipse.jface.viewers.IStructuredSelection;
23
import org.eclipse.jface.viewers.StructuredSelection;
24
import org.eclipse.jst.j2ee.internal.web.operations.WebPropertiesUtil;
25
import org.eclipse.jst.j2ee.model.IModelProvider;
26
import org.eclipse.jst.j2ee.model.ModelProviderManager;
27
import org.eclipse.jst.j2ee.ui.ltkbasedrefactoring.J2eeDeleteRefactoringWizard;
28
import org.eclipse.jst.javaee.core.Listener;
29
import org.eclipse.jst.javaee.web.Filter;
30
import org.eclipse.jst.javaee.web.FilterMapping;
31
import org.eclipse.jst.javaee.web.Servlet;
32
import org.eclipse.jst.javaee.web.ServletMapping;
33
import org.eclipse.jst.javaee.web.WebApp;
34
import org.eclipse.jst.jee.ui.internal.navigator.web.WebAppProvider;
35
import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin;
36
import org.eclipse.jst.servlet.ui.internal.navigator.AvailableWebArtifactsDialogContentProvider;
37
import org.eclipse.jst.servlet.ui.internal.navigator.AvailableWebArtifactsDialogLabelProvider;
38
import org.eclipse.jst.servlet.ui.internale.ltkbasedrefactoring.WebArtifactDeleteProcessor;
39
import org.eclipse.jst.servlet.ui.internale.ltkbasedrefactoring.WebRefactoringUtils;
40
import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
41
import org.eclipse.swt.widgets.Shell;
42
import org.eclipse.ui.IObjectActionDelegate;
43
import org.eclipse.ui.IWorkbenchPart;
44
import org.eclipse.ui.PlatformUI;
45
import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
46
47
public class DeleteWebArtifacts implements IObjectActionDelegate{
48
49
	private ISelection sel = new StructuredSelection();
50
	private IWorkbenchPart targetPart;
51
	private String fullyQualifiedName;
52
53
	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
54
		this.setTargetPart(targetPart);
55
		
56
	}
57
	
58
	public void run(IAction action) {
59
		if (sel == null)
60
			return;
61
		
62
		IStructuredSelection selection = (StructuredSelection) sel;
63
		if (!selection.isEmpty()) {
64
			List<Object> selections = new ArrayList<Object>();
65
			Iterator it = selection.iterator();
66
			while(it.hasNext()){
67
				selections.add(it.next());
68
			}
69
			delete(selections);
70
		}		
71
	}
72
	
73
    private void delete(List<Object> objects){
74
    	Map<Object, List<IResource>> map = new HashMap<Object, List<IResource>>();
75
    	for(Object object : objects){
76
    		getObjectsToBeDeleted(map, object);
77
    	  }
78
    	
79
    	deleteResources(objects, map);
80
    	}
81
82
	private void deleteResources(List<Object> objects, Map<Object, List<IResource>> map ){
83
		
84
		List<Object> javaObjects = new ArrayList<Object>();
85
		for (int i = 0; i < objects.size(); i++) {
86
			Object obj = objects.get(i);
87
			getArtifactByMappingToBeDeleted(objects, javaObjects, obj);
88
		}
89
90
		if (!javaObjects.isEmpty()) {
91
			Object[] obj = openDialog(javaObjects);
92
			if (obj != null && obj.length != 0) {
93
				for (Object ob : obj) {
94
					objects.add(ob);
95
					getObjectsToBeDeleted(map, ob);
96
				}
97
			}
98
		}
99
		 
100
		
101
		WebArtifactDeleteProcessor processor = new WebArtifactDeleteProcessor(objects, map);
102
		J2eeDeleteRefactoringWizard wiz = new J2eeDeleteRefactoringWizard(processor, objects);
103
		
104
		RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(wiz); 
105
		try { 
106
			String titleForFailedChecks = ""; //$NON-NLS-1$ 
107
			op.run(new Shell(), titleForFailedChecks ); 
108
		} catch( InterruptedException irex ) { 
109
			// operation was cancelled 
110
		}
111
	}
112
113
	private void getObjectsToBeDeleted(Map<Object, List<IResource>> map,
114
			Object object) {
115
		List<IResource> resourcesToBeMappedToObject = new ArrayList<IResource>();
116
		IProject project = ProjectUtilities.getProject(object);
117
		IModelProvider modelProvider = ModelProviderManager.getModelProvider(project);
118
		WebApp webApp = (WebApp) modelProvider.getModelObject();
119
		String container = WebPropertiesUtil.getJavaSourceFolder(project).getName();
120
121
		WebAppProvider prov = new WebAppProvider(webApp, project);
122
		IFile webXML = prov.getDDFile();
123
		specifyObjectNameByItsType(object);
124
		
125
		getObjectResource(resourcesToBeMappedToObject, project,
126
				container);
127
		
128
		if(!resourcesToBeMappedToObject.contains(webXML)){
129
		    resourcesToBeMappedToObject.add(webXML);
130
		}
131
		map.put(object, resourcesToBeMappedToObject);
132
	}
133
	
134
135
	private void specifyObjectNameByItsType(Object object) {
136
		if(object instanceof Servlet){
137
			fullyQualifiedName = ((Servlet)object).getServletClass();
138
		} else if(object instanceof Filter){
139
			fullyQualifiedName = ((Filter)object).getFilterClass();
140
		} else if (object instanceof Listener){
141
			fullyQualifiedName = ((Listener)object).getListenerClass();
142
		}
143
	}
144
145
	private void getObjectResource(List<IResource> resourcesToBeMappedToObject, IProject project,
146
			String container) {
147
		if(fullyQualifiedName!=null){
148
			IResource resource = project.getFile(new Path(
149
				container + "/" + (fullyQualifiedName).replace(".", "/") + ".java"));   //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
150
		 if(resource !=null && resource.exists()){
151
			 if(!resourcesToBeMappedToObject.contains(resource)){
152
		        resourcesToBeMappedToObject.add(resource);
153
			 }
154
			 getPackage(resourcesToBeMappedToObject, project,
155
					resource);
156
		 }
157
		}
158
	}
159
160
	private void getPackage(List<IResource> resourcesToBeMappedToObject, IProject project,
161
			IResource resource) {
162
		IResource packageResource = resource.getParent();
163
			if (getWebArtifactPackage(fullyQualifiedName, fullyQualifiedName
164
					.replaceAll(packageResource.getName() + ".", ""), project)) {  //$NON-NLS-1$ //$NON-NLS-2$
165
				if(!resourcesToBeMappedToObject.contains(packageResource)){
166
				    resourcesToBeMappedToObject.add(packageResource);
167
				}
168
		    }
169
	}
170
	
171
	private void getArtifactByMappingToBeDeleted(List<Object> objects,
172
			List<Object> javaObjects, Object obj) {
173
		
174
		if(obj instanceof FilterMapping){
175
			IProject project = ProjectUtilities.getProject(obj);
176
			IModelProvider modelProvider = ModelProviderManager.getModelProvider(project);
177
			WebApp webApp = (WebApp) modelProvider.getModelObject();
178
		    Filter filter = getFilter(webApp, ((FilterMapping)obj).getFilterName());
179
		    List<FilterMapping> mappings = WebRefactoringUtils.getFilterMappings(webApp, filter.getFilterName());
180
		    if(objects.containsAll(mappings) && !objects.contains(filter) && !javaObjects.contains(filter)){
181
		    	javaObjects.add(filter);
182
		    }
183
		} else if(obj instanceof ServletMapping){
184
			IProject project = ProjectUtilities.getProject(obj);
185
			IModelProvider modelProvider = ModelProviderManager.getModelProvider(project);
186
			WebApp webApp = (WebApp) modelProvider.getModelObject();
187
		    Servlet servlet = getServlet(webApp, ((ServletMapping)obj).getServletName());
188
		    List<ServletMapping> mappings = WebRefactoringUtils.getServletMappings(webApp, servlet.getServletName());
189
		    if(objects.containsAll(mappings) && !objects.contains(servlet) && !javaObjects.contains(servlet)){
190
		    	javaObjects.add(servlet);
191
		    }
192
		}
193
	}
194
	
195
196
    private Servlet getServlet(WebApp webApp, String servletName) {
197
        if (webApp == null || servletName == null) return null;
198
        List servlets = webApp.getServlets();
199
        for (Iterator iterator = servlets.iterator(); iterator.hasNext();) {
200
            Servlet servlet = (Servlet) iterator.next();
201
            if (servletName.equals(servlet.getServletName())) {
202
                return servlet;
203
            }
204
        }
205
        return null;
206
    }
207
	
208
	private Object[] openDialog(final List<Object> list){
209
				
210
				CheckedTreeSelectionDialog dialog = new CheckedTreeSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), new AvailableWebArtifactsDialogLabelProvider(), new AvailableWebArtifactsDialogContentProvider());
211
		
212
				dialog.setTitle("Delete Artifact Confirm"); //$NON-NLS-1$
213
				dialog.setMessage("All mappings of these elements will be deleted. It is recommended to delete the elements.");  //$NON-NLS-1$
214
				dialog.setInput(list);       
215
		        
216
		        int pressed = dialog.open();
217
		        if(pressed == IDialogConstants.OK_ID){
218
		        	return dialog.getResult();
219
		        }
220
		        return null;
221
			}
222
	
223
	private Filter getFilter(WebApp webApp, String filterName) {
224
	       if (webApp == null || filterName == null) return null;
225
	       List filters = webApp.getFilters();
226
	       for (Iterator iterator = filters.iterator(); iterator.hasNext();) {
227
	           Filter filter = (Filter) iterator.next();
228
	           if (filterName.equals(filter.getFilterName())) {
229
	               return filter;
230
	           }
231
	       }
232
	       return null;
233
	   }
234
	
235
 	private boolean getWebArtifactPackage(
236
			String webArtifactClass, String webArtifactName, IProject project) {
237
		IPackageFragment webArtifactPackage = null;
238
		try {
239
			IType webArtifact = JavaCore.create(project).findType(webArtifactClass);
240
		    if(webArtifact!=null){
241
			     webArtifactPackage = webArtifact.getPackageFragment();
242
		    if(webArtifactPackage.hasChildren()){
243
		    	IJavaElement[] el = webArtifactPackage.getChildren();
244
		    	if(el.length==1){
245
		    		if(el[0].getElementName().equals(webArtifactName+".java")){ //$NON-NLS-1$
246
		    			return true;
247
		    		}
248
		    	}
249
			} else {
250
				return true;
251
			}
252
		    }
253
		} catch (JavaModelException e1) {
254
			JEEUIPlugin.logError("Cannot find resource.", e1); //$NON-NLS-1$
255
		}
256
		return false;
257
	}
258
	
259
	public void selectionChanged(IAction action, ISelection selection) {
260
		sel = selection;				
261
	}
262
263
	public void setTargetPart(IWorkbenchPart targetPart) {
264
		this.targetPart = targetPart;
265
	}
266
267
	public IWorkbenchPart getTargetPart() {
268
		return targetPart;
269
	}
270
271
}
272
(-)servlet_ui/org/eclipse/jst/servlet/ui/internal/navigator/AvailableWebArtifactsDialogContentProvider.java (+36 lines)
Added Link Here
1
package org.eclipse.jst.servlet.ui.internal.navigator;
2
3
import java.util.List;
4
5
import org.eclipse.jface.viewers.ITreeContentProvider;
6
import org.eclipse.jface.viewers.Viewer;
7
8
public class AvailableWebArtifactsDialogContentProvider implements
9
		ITreeContentProvider {
10
11
	public Object[] getChildren(Object parentElement) {
12
		return null;
13
	}
14
15
	public Object getParent(Object element) {
16
		return null;
17
	}
18
19
	public boolean hasChildren(Object element) {
20
		return false;
21
	}
22
23
	public Object[] getElements(Object inputElement) {
24
		if(inputElement instanceof List){
25
              return ((List)inputElement).toArray(new Object[((List)inputElement).size()]);
26
		}
27
		return null;
28
	}
29
30
	public void dispose() {
31
	}
32
33
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
34
	}
35
36
}
(-)servlet_ui/org/eclipse/jst/servlet/ui/internal/navigator/AvailableWebArtifactsDialogLabelProvider.java (+58 lines)
Added Link Here
1
package org.eclipse.jst.servlet.ui.internal.navigator;
2
3
import java.net.URL;
4
5
import org.eclipse.core.resources.IProject;
6
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
7
import org.eclipse.jface.resource.ImageDescriptor;
8
import org.eclipse.jface.viewers.ILabelProvider;
9
import org.eclipse.jface.viewers.ILabelProviderListener;
10
import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin;
11
import org.eclipse.jst.javaee.web.Filter;
12
import org.eclipse.jst.javaee.web.Servlet;
13
import org.eclipse.jst.jee.ui.plugin.JEEUIPluginIcons;
14
import org.eclipse.swt.graphics.Image;
15
16
public class AvailableWebArtifactsDialogLabelProvider implements ILabelProvider{
17
	
18
	public Image getImage(Object element) {
19
		Image image = null;
20
		if(element instanceof Filter){
21
			URL url = (URL) J2EEPlugin.getPlugin().getImage(JEEUIPluginIcons.FILTER_MAPPING);
22
			ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url); 
23
		    image = imageDescriptor.createImage();
24
		} else if (element instanceof Servlet){
25
			URL url = (URL) J2EEPlugin.getPlugin().getImage(JEEUIPluginIcons.GROUP_SERVLET);
26
			ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url); 
27
		    image = imageDescriptor.createImage();
28
		}
29
		return image;
30
	}
31
32
	public String getText(Object element) {
33
		String name = null;
34
        if(element instanceof Filter){
35
        	name = ((Filter)element).getFilterClass();
36
        } else if(element instanceof Servlet){
37
        	name = ((Servlet)element).getServletClass();
38
        }
39
        IProject project = ProjectUtilities.getProject(element);
40
        name = name + "-" + project.getFullPath().toString(); //$NON-NLS-1$
41
		return name;
42
	}
43
44
	public void addListener(ILabelProviderListener listener) {
45
	}
46
47
	public void dispose() {
48
	}
49
50
	public boolean isLabelProperty(Object element, String property) {
51
		return false;
52
	}
53
54
	public void removeListener(ILabelProviderListener listener) {
55
	}
56
57
}
58
(-)servlet_ui/org/eclipse/jst/servlet/ui/internale/ltkbasedrefactoring/WebArtifactDeleteProcessor.java (+434 lines)
Added Link Here
1
package org.eclipse.jst.servlet.ui.internale.ltkbasedrefactoring;
2
3
import java.util.ArrayList;
4
import java.util.List;
5
import java.util.Map;
6
7
import org.eclipse.core.resources.IFile;
8
import org.eclipse.core.resources.IProject;
9
import org.eclipse.core.resources.IResource;
10
import org.eclipse.core.runtime.CoreException;
11
import org.eclipse.core.runtime.NullProgressMonitor;
12
import org.eclipse.core.runtime.Path;
13
import org.eclipse.emf.ecore.util.FeatureMap;
14
import org.eclipse.emf.ecore.util.FeatureMap.Entry;
15
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
16
import org.eclipse.jface.text.Document;
17
import org.eclipse.jface.text.IDocument;
18
import org.eclipse.jst.j2ee.internal.web.operations.WebPropertiesUtil;
19
import org.eclipse.jst.j2ee.model.IModelProvider;
20
import org.eclipse.jst.javaee.core.Listener;
21
import org.eclipse.jst.javaee.core.UrlPatternType;
22
import org.eclipse.jst.javaee.ltk.core.delete.J2eeDeleteProcessorImpl;
23
import org.eclipse.jst.javaee.web.Filter;
24
import org.eclipse.jst.javaee.web.FilterMapping;
25
import org.eclipse.jst.javaee.web.Servlet;
26
import org.eclipse.jst.javaee.web.ServletMapping;
27
import org.eclipse.jst.javaee.web.WebApp;
28
import org.eclipse.jst.jee.ui.internal.navigator.web.WebAppProvider;
29
import org.eclipse.ltk.core.refactoring.TextFileChange;
30
import org.eclipse.text.edits.DeleteEdit;
31
32
public class WebArtifactDeleteProcessor extends J2eeDeleteProcessorImpl {
33
	
34
	private String fObjectFullyQualifiedName;
35
	private String fObjectName;
36
	private List<DeleteEdit> deletes = new ArrayList<DeleteEdit>();	
37
	private List<Object> fObjects = new ArrayList<Object>();
38
	private String fStartTag;
39
	private String fEndTag;
40
41
	public WebArtifactDeleteProcessor(List<Object> objects,
42
			Map<Object, List<IResource>> map) {
43
		super(objects, map);
44
		fObjects = objects;
45
	}
46
	
47
48
	public Object specifyXMLFile(IProject project,
49
			IModelProvider modelProvider) {
50
		WebApp webApp = (WebApp) modelProvider.getModelObject();
51
		WebAppProvider prov = new WebAppProvider(webApp, project);
52
53
		if(getXmlFile() == null){
54
			setXmlFile(prov.getDDFile());
55
		} else {
56
			if(!getXmlFile().equals(prov.getDDFile())){
57
				setXmlFile(prov.getDDFile());
58
			}
59
		}
60
		
61
		if(!getFiles().contains(getXmlFile())){
62
			getFiles().add(getXmlFile());
63
		}
64
		return webApp;
65
	}
66
67
68
	public void modifyXML(IFile file, Object modelObject, TextFileChange result,
69
			Object fObject) throws CoreException {
70
		WebApp webApp = (WebApp) modelObject; 
71
		
72
		String xmlContent = result.getCurrentContent(new NullProgressMonitor());
73
		
74
		List<String> listString = new ArrayList<String>();
75
76
		IDocument doc = new Document();
77
		doc.set(xmlContent);
78
79
		if (fObject instanceof Listener) {
80
			listenerObjectChanges(file, fObject, xmlContent, listString, doc);
81
		}
82
		if (fObject instanceof Filter) {
83
			filterChanges(file, webApp, fObject, xmlContent, listString, doc);
84
		}
85
		if (fObject instanceof Servlet) {
86
			servletChanges(file, webApp, fObject, xmlContent, listString, doc);
87
		}
88
		if (fObject instanceof FilterMapping) {
89
			filterMappingChanges(file, fObject, xmlContent, listString, doc);
90
		}
91
		if (fObject instanceof ServletMapping) {
92
			servletMappingsChanges(file, fObject, xmlContent, listString, doc);
93
		}
94
	}
95
	
96
	   
97
		public String getObjectName(Object object){
98
	    	String name = null;
99
	    	if(object instanceof Servlet){
100
	    		name = ((Servlet)object).getServletName();
101
	    	} else if(object instanceof Filter){
102
	    		name = ((Filter)object).getFilterName();
103
	    	} else if(object instanceof Listener){
104
	    		name = ((Listener)object).getListenerClass();
105
	    	} else if(object instanceof FilterMapping){
106
	    		name = getFilterMappingDisplay((FilterMapping)object);
107
	    	} else if(object instanceof ServletMapping){
108
	    		name = getServletMappingDisplay((ServletMapping)object);
109
	    	}
110
	    	return name;
111
	    }
112
	  
113
	    
114
		public String getObjectType(Object object){
115
	    	String objectType = null;
116
	    	if(object instanceof Servlet){
117
	    		objectType = "servlet"; //$NON-NLS-1$
118
	    	} else if(object instanceof Filter){
119
	    		objectType = "filter"; //$NON-NLS-1$
120
	    	} else if(object instanceof Listener){
121
	    		objectType = "listener"; //$NON-NLS-1$
122
	    	} else if(object instanceof FilterMapping){
123
	    		objectType = "filter-mapping"; //$NON-NLS-1$
124
	    	} else if(object instanceof ServletMapping){
125
	    		objectType = "servlet-mapping"; //$NON-NLS-1$
126
	    	}
127
	    	return objectType;
128
	    }
129
	   
130
	    
131
		public IResource getObjectResource(Object object){
132
	    	IProject project = ProjectUtilities.getProject(object);
133
			String container = WebPropertiesUtil.getJavaSourceFolder(project).getName();
134
	    	String fullyQualifiedName = getFullyQualifiedName(object);
135
	    	if(fullyQualifiedName!=null){
136
				IResource resource = project.getFile(new Path(
137
					container + "/" + (fullyQualifiedName).replace(".", "/") + ".java"));   //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
138
	    	    return resource;
139
	    	}
140
	        return null;    
141
	    }
142
	    
143
	    private String getFullyQualifiedName(Object object){
144
	    	String name = null;
145
	    	if(object instanceof Servlet){
146
	    		name = ((Servlet)object).getServletName();
147
	    	} else if(object instanceof Filter){
148
	    		name = ((Filter)object).getFilterName();
149
	    	} else if(object instanceof Listener){
150
	    		name = ((Listener)object).getListenerClass();
151
	    	}
152
	    	return name;
153
	    }
154
155
	private void listenerObjectChanges(IFile file, Object fObject,
156
			String xmlContent, List<String> listString, IDocument doc) {
157
		fObjectFullyQualifiedName = ((Listener) fObject).getListenerClass();
158
		setfStartTag("<listener>"); //$NON-NLS-1$
159
		setfEndTag("</listener>"); //$NON-NLS-1$
160
		String identifyObject = getfStartTag().replace(">", "-class>") + fObjectFullyQualifiedName + getfEndTag().replace(">", "-class>"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
161
		List<String> identifyObjects = new ArrayList<String>();
162
		identifyObjects.add(identifyObject);
163
		findELementTag(file, xmlContent, listString, doc, identifyObjects);
164
	}
165
166
	private void filterChanges(IFile file, WebApp webApp, Object fObject,
167
			String xmlContent, List<String> listString, IDocument doc) {
168
		List<String> identifyObjects;
169
		filterObjectChanges(file, fObject, xmlContent, listString, doc);
170
171
		List<FilterMapping> filterMappings = WebRefactoringUtils.getFilterMappings(webApp,
172
				fObjectName);
173
		for (int j = 0; j < filterMappings.size(); j++) {
174
			identifyObjects = new ArrayList<String>();
175
			FilterMapping filterMapping = filterMappings.get(j);
176
			if (fObjects.contains(filterMapping))
177
				continue;
178
			urlPatternForFilterChanges(file, xmlContent, listString, doc,
179
					identifyObjects, filterMapping);
180
			servletForFilterChanges(file, xmlContent, listString, doc,
181
					identifyObjects, filterMapping);
182
		}
183
	}
184
185
	private void filterObjectChanges(IFile file, Object fObject,
186
			String xmlContent, List<String> listString, IDocument doc) {
187
		fObjectFullyQualifiedName = ((Filter) fObject).getFilterClass();
188
		fObjectName = ((Filter) fObject).getFilterName();
189
		setfStartTag("<filter>"); //$NON-NLS-1$
190
		setfEndTag("</filter>"); //$NON-NLS-1$
191
		String identifyObject = getfStartTag().replace(">", "-name>") + fObjectName + getfEndTag().replace(">", "-name>"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
192
		List<String> identifyObjects = new ArrayList<String>();
193
		identifyObjects.add(identifyObject);
194
		findELementTag(file, xmlContent, listString, doc, identifyObjects);
195
	}
196
197
	private void servletForFilterChanges(IFile file, String xmlContent,
198
			List<String> listString, IDocument doc,
199
			List<String> identifyObjects, FilterMapping filterMapping) {
200
		String identifyObject;
201
		if (filterMapping.getServletNames().size() > 0) {
202
			setfStartTag("<filter-mapping>"); //$NON-NLS-1$
203
			setfEndTag("</filter-mapping>"); //$NON-NLS-1$
204
			for (int k = 0; k < filterMapping.getServletNames().size(); k++) {
205
				fObjectName = filterMapping.getServletNames()
206
						.get(k);
207
				identifyObject = "<servlet-name>" + fObjectName + "</servlet-name>"; //$NON-NLS-1$ //$NON-NLS-2$
208
				identifyObjects.add(identifyObject);
209
			}
210
			findELementTag(file, xmlContent, listString, doc,
211
					identifyObjects);
212
		}
213
	}
214
215
	private void urlPatternForFilterChanges(IFile file, String xmlContent,
216
			List<String> listString, IDocument doc,
217
			List<String> identifyObjects, FilterMapping filterMapping) {
218
		String identifyObject;
219
		if (filterMapping.getUrlPatterns().size() > 0) {
220
			setfStartTag("<filter-mapping>"); //$NON-NLS-1$
221
			setfEndTag("</filter-mapping>"); //$NON-NLS-1$
222
			for (int k = 0; k < filterMapping.getUrlPatterns().size(); k++) {
223
				fObjectName = (filterMapping
224
						.getUrlPatterns().get(k)).getValue();
225
				identifyObject = "<url-pattern>" + fObjectName + "</url-pattern>"; //$NON-NLS-1$ //$NON-NLS-2$
226
				identifyObjects.add(identifyObject);
227
			}
228
			findELementTag(file, xmlContent, listString, doc,
229
					identifyObjects);
230
		}
231
	}
232
233
	private void servletMappingsChanges(IFile file, Object fObject,
234
			String xmlContent, List<String> listString, IDocument doc) {
235
		ServletMapping servletMapping = (ServletMapping) fObject;
236
		List<String> identifyObjects = new ArrayList<String>();
237
		if (servletMapping.getUrlPatterns().size() > 0) {
238
			urlPatternForServletChanges(file, xmlContent, listString, doc,
239
					servletMapping, identifyObjects);
240
		}
241
	}
242
243
	private void urlPatternForServletChanges(IFile file, String xmlContent,
244
			List<String> listString, IDocument doc,
245
			ServletMapping servletMapping, List<String> identifyObjects) {
246
		setfStartTag("<servlet-mapping>"); //$NON-NLS-1$
247
		setfEndTag("</servlet-mapping>"); //$NON-NLS-1$
248
		for (int k = 0; k < servletMapping.getUrlPatterns().size(); k++) {
249
			fObjectName = (servletMapping
250
					.getUrlPatterns().get(k)).getValue();
251
			String identifyObject = "<url-pattern>" + fObjectName + "</url-pattern>"; //$NON-NLS-1$ //$NON-NLS-2$
252
			identifyObjects.add(identifyObject);
253
		}
254
		findELementTag(file, xmlContent, listString, doc,
255
				identifyObjects);
256
	}
257
258
	private void filterMappingChanges(IFile file, Object fObject,
259
			String xmlContent, List<String> listString, IDocument doc) {
260
		FilterMapping filterMapping = (FilterMapping) fObject;
261
		List<String> identifyObjects = new ArrayList<String>();
262
		urlPatternForFilterChanges(file, xmlContent, listString, doc, identifyObjects, filterMapping);
263
		servletForFilterChanges(file, xmlContent, listString, doc, identifyObjects, filterMapping);
264
	}
265
266
	private void servletChanges(IFile file, WebApp webApp, Object fObject,
267
			String xmlContent, List<String> listString, IDocument doc) {
268
		List<String> identifyObjects;
269
		servletObjectChanges(file, fObject, xmlContent, listString, doc);
270
271
		List<ServletMapping> servletMappings = WebRefactoringUtils.getServletMappings(webApp,
272
				fObjectName);
273
		for (int j = 0; j < servletMappings.size(); j++) {
274
			identifyObjects = new ArrayList<String>();
275
			ServletMapping servletMapping = servletMappings.get(j);
276
			if (fObjects.contains(servletMapping))
277
				continue;
278
			urlPatternForServletChanges(file, xmlContent, listString, doc, servletMapping, identifyObjects);
279
		}
280
	}
281
282
	private void servletObjectChanges(IFile file, Object fObject,
283
			String xmlContent, List<String> listString, IDocument doc) {
284
		fObjectFullyQualifiedName = ((Servlet) fObject).getServletClass();
285
		fObjectName = ((Servlet) fObject).getServletName();
286
		setfStartTag("<servlet>"); //$NON-NLS-1$
287
		setfEndTag("</servlet>"); //$NON-NLS-1$
288
		String identifyObject = getfStartTag().replace(">", "-name>") + fObjectName + getfEndTag().replace(">", "-name>"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
289
		List<String> identifyObjects = new ArrayList<String>();
290
		identifyObjects.add(identifyObject);
291
		findELementTag(file, xmlContent, listString, doc, identifyObjects);
292
	}
293
294
	private void findELementTag(IFile file, String xmlContent,
295
			List<String> listString, IDocument doc, List<String> identifyObject) {
296
		if (getfStartTag() != null && getfEndTag() != null
297
				&& xmlContent.contains(getfStartTag())
298
				&& xmlContent.contains(getfEndTag())) {
299
			createXMLChangeToBeShown(file, xmlContent, listString, doc,
300
					identifyObject, getfStartTag(), getfEndTag());
301
		}
302
	}
303
	
304
	
305
	private void createXMLChangeToBeShown(IFile file, String xmlContent,
306
			List<String> listStrings, IDocument doc,
307
			List<String> identifyObject, String tag, String enclosingTag) {
308
		List<String> strings = markTextToBeDeletedFromXML(doc, tag,
309
				enclosingTag);
310
		findStartAndEndPoint(xmlContent, listStrings, strings, doc, tag,
311
				enclosingTag, identifyObject);
312
		DeleteEdit edit = new DeleteEdit(getOffset(), getLength());
313
314
		if (!getEditMap().containsKey(file)) {
315
			deletes = new ArrayList<DeleteEdit>();
316
			deletes.add(edit);
317
			getEditMap().put(file, deletes);
318
		} else {
319
			if (!getEditMap().get(file).contains(edit)) {
320
				getEditMap().get(file).add(edit);
321
			}
322
		}
323
	}
324
325
	private void findStartAndEndPoint(String xmlContent,
326
			List<String> textStrings, List<String> strings, IDocument doc,
327
			String startTag, String endTag, List<String> identifyObject) {
328
		String s = ""; //$NON-NLS-1$
329
330
		for (int p = 0; p < strings.size(); p++) {
331
			s = s + strings.get(p);
332
		}
333
		textStrings.add(s);
334
335
		for (int i = 0; i < strings.size(); i++) {
336
			String st = strings.get(i);
337
			st = st.trim();
338
			strings.remove(i);
339
			strings.add(i, st);
340
		}
341
342
		if (strings.containsAll(identifyObject)) {
343
			setOffset(xmlContent.indexOf(s));
344
			setLength(s.length());
345
		} else {
346
			String textDoc = xmlContent;
347
			for (int j = 0; j < textStrings.size(); j++) {
348
				if (textDoc.contains(textStrings.get(j))) {
349
					textDoc = textDoc.replace(textStrings.get(j), ""); //$NON-NLS-1$
350
				}
351
			}
352
353
			IDocument doc1 = new Document(textDoc);
354
			List<String> strings1 = markTextToBeDeletedFromXML(doc1, startTag,
355
					endTag);
356
			findStartAndEndPoint(xmlContent, textStrings, strings1, doc,
357
					startTag, endTag, identifyObject);
358
		}
359
	}
360
361
	private List<String> markTextToBeDeletedFromXML(IDocument doc,
362
			String startTag, String endTag) {
363
		int linesSum = doc.getNumberOfLines();
364
		List<String> strings = new ArrayList<String>();
365
		findElementInXML: for (int l = 0; l < linesSum; l++) {
366
			try {
367
				int start = doc.getLineOffset(l);
368
				
369
				int lengthOfString = doc.getLineLength(l);
370
371
				if (start != 0 && lengthOfString != 0) {
372
					String stringOfWebArtifact = doc.get(start, lengthOfString);
373
					if (stringOfWebArtifact.contains(startTag)) {
374
						strings.add(stringOfWebArtifact);
375
						for (int m = l + 1; m < linesSum; m++) {
376
							int nextStart = doc.getLineOffset(m);
377
							int nextStringLength = doc.getLineLength(m);
378
							String nextStringOfWebArtifact = doc.get(nextStart,
379
									nextStringLength);
380
							strings.add(nextStringOfWebArtifact);
381
							if (nextStringOfWebArtifact.contains(endTag)) {
382
								break findElementInXML;
383
							}
384
						}
385
					}
386
				}
387
388
			} catch (Exception e) {
389
				e.printStackTrace();
390
			}
391
		}
392
		return strings;
393
	}
394
 
395
    private String getFilterMappingDisplay(FilterMapping element) {
396
		UrlPatternType urlPatterns = null;
397
		String value = null;
398
		if (element.getUrlPatterns().size() > 0){
399
			urlPatterns = element.getUrlPatterns().get(0);
400
			value = urlPatterns.getValue();
401
		}else{
402
			FeatureMap group = element.getGroup();
403
			if (group.size() >0) {
404
				Entry entry = group.get(0);
405
				value = entry.getValue().toString();
406
			}
407
		}
408
		return value + " -> " + element.getFilterName(); //$NON-NLS-1$
409
	}
410
411
	private String getServletMappingDisplay(ServletMapping element) {
412
		UrlPatternType urlPatterns = element.getUrlPatterns().get(0);
413
		return urlPatterns.getValue() + " -> " + element.getServletName(); //$NON-NLS-1$;
414
	}
415
416
	public void setfStartTag(String startTag) {
417
		this.fStartTag = startTag;
418
	}
419
420
	public String getfStartTag() {
421
		return fStartTag;
422
	}
423
424
	public void setfEndTag(String endTag) {
425
		this.fEndTag = endTag;
426
	}
427
428
	public String getfEndTag() {
429
		return fEndTag;
430
	}
431
432
}
433
434
(-)servlet_ui/org/eclipse/jst/servlet/ui/internale/ltkbasedrefactoring/WebRefactoringUtils.java (+37 lines)
Added Link Here
1
package org.eclipse.jst.servlet.ui.internale.ltkbasedrefactoring;
2
3
import java.util.ArrayList;
4
import java.util.Iterator;
5
import java.util.List;
6
7
import org.eclipse.jst.javaee.web.FilterMapping;
8
import org.eclipse.jst.javaee.web.ServletMapping;
9
import org.eclipse.jst.javaee.web.WebApp;
10
11
public class WebRefactoringUtils {
12
	public static List<ServletMapping> getServletMappings(WebApp webApp, String servletName) {
13
        List<ServletMapping> mappings = new ArrayList<ServletMapping>();
14
		if (webApp == null || servletName == null) return null;
15
        List servletMappings = webApp.getServletMappings();
16
        for (Iterator iterator = servletMappings.iterator(); iterator.hasNext();) {
17
            ServletMapping servletMapping = (ServletMapping) iterator.next();
18
            if (servletName.equals(servletMapping.getServletName())) {
19
                mappings.add(servletMapping);
20
            }
21
        }
22
        return mappings;
23
    }
24
	
25
	public static List<FilterMapping> getFilterMappings(WebApp webApp, String filterName) {
26
    	List<FilterMapping> mappings = new ArrayList<FilterMapping>();
27
    	if (webApp == null || filterName == null ) return null;
28
        List filterMappings = webApp.getFilterMappings();
29
        for (Iterator iterator = filterMappings.iterator(); iterator.hasNext();) {
30
            FilterMapping filterMapping = (FilterMapping) iterator.next();
31
            if (filterName.equals(filterMapping.getFilterName())) {
32
                mappings.add(filterMapping);
33
            }
34
        }
35
        return mappings;
36
    }
37
}

Return to bug 289767