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

Collapse All | Expand All

(-)META-INF/MANIFEST.MF (-1 / +3 lines)
Lines 29-35 Link Here
29
 org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
29
 org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
30
 org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)",
30
 org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)",
31
 org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)",
31
 org.eclipse.ui.views.properties.tabbed;bundle-version="[3.2.0,4.0.0)",
32
 org.eclipse.jst.jsf.common;bundle-version="[1.0.0,2.0.0)"
32
 org.eclipse.jst.jsf.common;bundle-version="[1.0.0,2.0.0)",
33
 org.eclipse.wst.common.snippets
33
Bundle-ActivationPolicy: lazy
34
Bundle-ActivationPolicy: lazy
34
Export-Package: org.eclipse.jst.jsf.facesconfig.ui;x-internal:=true,
35
Export-Package: org.eclipse.jst.jsf.facesconfig.ui;x-internal:=true,
35
 org.eclipse.jst.jsf.facesconfig.ui.dialog;x-internal:=true,
36
 org.eclipse.jst.jsf.facesconfig.ui.dialog;x-internal:=true,
Lines 52-57 Link Here
52
 org.eclipse.jst.jsf.facesconfig.ui.preference;x-internal:=true,
53
 org.eclipse.jst.jsf.facesconfig.ui.preference;x-internal:=true,
53
 org.eclipse.jst.jsf.facesconfig.ui.provider;x-internal:=true,
54
 org.eclipse.jst.jsf.facesconfig.ui.provider;x-internal:=true,
54
 org.eclipse.jst.jsf.facesconfig.ui.section;x-internal:=true,
55
 org.eclipse.jst.jsf.facesconfig.ui.section;x-internal:=true,
56
 org.eclipse.jst.jsf.facesconfig.ui.snippets,
55
 org.eclipse.jst.jsf.facesconfig.ui.util;x-internal:=true,
57
 org.eclipse.jst.jsf.facesconfig.ui.util;x-internal:=true,
56
 org.eclipse.jst.jsf.facesconfig.ui.wizard;x-internal:=true
58
 org.eclipse.jst.jsf.facesconfig.ui.wizard;x-internal:=true
57
Bundle-RequiredExecutionEnvironment: J2SE-1.5
59
Bundle-RequiredExecutionEnvironment: J2SE-1.5
(-)src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/PageflowEditor.java (+2 lines)
Lines 78-83 Link Here
78
import org.eclipse.jface.viewers.ISelection;
78
import org.eclipse.jface.viewers.ISelection;
79
import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
79
import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
80
import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
80
import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
81
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.AddSnippetAction;
81
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.AlignmentAction;
82
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.AlignmentAction;
82
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.OpenEditorAction;
83
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.OpenEditorAction;
83
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.ShowPropertyViewAction;
84
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.ShowPropertyViewAction;
Lines 347-352 Link Here
347
348
348
		// Allows opening of JSP files from the pageflow
349
		// Allows opening of JSP files from the pageflow
349
		addEditPartAction(new OpenEditorAction(this));
350
		addEditPartAction(new OpenEditorAction(this));
351
		addEditPartAction(new AddSnippetAction(this));
350
352
351
		// Allows showing property view for the pageflow
353
		// Allows showing property view for the pageflow
352
		SelectionAction action = new ShowPropertyViewAction(this);
354
		SelectionAction action = new ShowPropertyViewAction(this);
(-)plugin.xml (+12 lines)
Lines 84-89 Link Here
84
           name="%cheatsheet.jsf.title">
84
           name="%cheatsheet.jsf.title">
85
     </category>
85
     </category>
86
  </extension>
86
  </extension>
87
  <extension
88
        point="org.eclipse.wst.common.snippets.SnippetProvider">
89
     <provider
90
           impl="org.eclipse.jst.jsf.facesconfig.ui.snippets.FacesXmlProvider"
91
           priority="100">
92
       <enablement>
93
          <instanceof
94
                value="org.eclipse.jst.jsf.facesconfig.ui.pageflow.PageflowEditor">
95
          </instanceof></enablement>
96
     </provider>
97
  </extension>
98
   
87
  <!--<extension
99
  <!--<extension
88
        point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
100
        point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
89
     <propertyContributor
101
     <propertyContributor
(-)src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/action/Messages.java (+13 lines)
Added Link Here
1
package org.eclipse.jst.jsf.facesconfig.ui.pageflow.action;
2
3
import org.eclipse.osgi.util.NLS;
4
5
public class Messages extends NLS {
6
	private static final String BUNDLE_NAME = "org.eclipse.jst.jsf.facesconfig.ui.pageflow.action.messages"; //$NON-NLS-1$
7
	public static String AddSnippetAction_ADD_TO_SNIPPETS;
8
	static {
9
		// initialize resource bundle
10
		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
11
	}
12
13
}
(-)src/org/eclipse/jst/jsf/facesconfig/ui/snippets/NavigationSnippetInsertion.java (+111 lines)
Added Link Here
1
package org.eclipse.jst.jsf.facesconfig.ui.snippets;
2
3
import java.io.File;
4
import java.io.FileFilter;
5
import java.io.IOException;
6
import java.util.ArrayList;
7
import java.util.List;
8
9
import org.eclipse.core.resources.IFile;
10
import org.eclipse.core.resources.IProject;
11
import org.eclipse.core.resources.ResourcesPlugin;
12
import org.eclipse.core.runtime.IPath;
13
import org.eclipse.emf.common.util.EList;
14
import org.eclipse.emf.common.util.URI;
15
import org.eclipse.emf.ecore.EObject;
16
import org.eclipse.emf.ecore.resource.Resource;
17
import org.eclipse.emf.ecore.resource.ResourceSet;
18
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
19
import org.eclipse.emf.ecore.util.EcoreUtil;
20
import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType;
21
import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
22
import org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor;
23
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.PageflowEditor;
24
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.layout.PageflowLayoutManager;
25
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.synchronization.FC2PFTransformer;
26
import org.eclipse.swt.dnd.Transfer;
27
import org.eclipse.ui.IEditorPart;
28
import org.eclipse.wst.common.snippets.core.ISnippetItem;
29
import org.eclipse.wst.common.snippets.internal.dnd.SnippetTransfer;
30
import org.eclipse.wst.common.snippets.internal.model.SnippetManager;
31
import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
32
import org.eclipse.wst.common.snippets.ui.DefaultSnippetInsertion;
33
34
public class NavigationSnippetInsertion extends DefaultSnippetInsertion {
35
36
	private ISnippetItem item;
37
38
	@Override
39
	public void insert(IEditorPart editorPart) {
40
		PageflowEditor pageflowEditor = (PageflowEditor)((FacesConfigEditor)editorPart).getPageflowPage();
41
		FC2PFTransformer modelsTransform = pageflowEditor.getModelsTransform();
42
		FacesConfigType facesConfig = modelsTransform.getFacesConfig();
43
		
44
		
45
		IPath path_for_model = pageflowEditor.getPageflowManager().getPath();
46
		IFile containerForLocation = ResourcesPlugin.getWorkspace().getRoot().getFile(path_for_model);
47
		IProject project = containerForLocation.getProject();
48
		
49
		ResourceSet rset = new ResourceSetImpl();
50
		IPath storage = SnippetManager.getInstance().getStorage(item.getId());
51
		Resource resource = rset.createResource(URI.createFileURI(storage.append("faces-config-snippet.xml").toOSString())); //$NON-NLS-1$
52
		try {
53
			File folder = new File(((SnippetPaletteItem)item).getStorage().toOSString());
54
			List<File> resources = new ArrayList<File>();
55
			recursivelyGetResources(folder, resources, new Filter());
56
			
57
			resource.load(null);
58
			EList<EObject> contents = resource.getContents();
59
			for (EObject eObject : contents) {
60
				if (eObject != null)
61
				facesConfig.getNavigationRule().add(EcoreUtil.copy(eObject));
62
			}
63
			
64
			SnippetManager.getInstance().moveFilesInWorkspace(resources, project, storage);
65
						
66
			modelsTransform.updatePageflowModelFromEMF();
67
			PageflowLayoutManager.getInstance().layoutPageflow(
68
					pageflowEditor.getPageflow());
69
			
70
		} catch (IOException e) {
71
			EditorPlugin.getDefault().getRootLogger().error(e);
72
		}
73
		
74
		
75
	}
76
77
	private void recursivelyGetResources(File folder, List<File> resources, FileFilter filter) {
78
		File[] listFiles = folder.listFiles(filter);
79
		for (File file : listFiles) {
80
			if(file.isDirectory()){
81
				recursivelyGetResources(file, resources, filter);
82
			} else {
83
				resources.add(file);
84
			}
85
		}
86
		
87
	}
88
	
89
	//Only generated xml should not be copied in the project.
90
	private class Filter implements FileFilter {
91
		public boolean accept(File pathname) {
92
			return !pathname.getName().toLowerCase().endsWith(".xml"); //$NON-NLS-1$
93
		}
94
		
95
	}
96
97
98
99
100
	@Override
101
	public Transfer[] getTransfers() {
102
		return new Transfer[] {SnippetTransfer.getInstance()};
103
	}
104
	
105
	@Override
106
	public void setItem(ISnippetItem item) {
107
		super.setItem(item);
108
		this.item = item;
109
	}
110
111
}
(-)src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/action/messages.properties (+1 lines)
Added Link Here
1
AddSnippetAction_ADD_TO_SNIPPETS=Add To Snippets
(-)src/org/eclipse/jst/jsf/facesconfig/ui/pageflow/action/AddSnippetAction.java (+51 lines)
Added Link Here
1
package org.eclipse.jst.jsf.facesconfig.ui.pageflow.action;
2
3
import java.util.List;
4
5
import org.eclipse.gef.commands.Command;
6
import org.eclipse.gef.ui.actions.SelectionAction;
7
import org.eclipse.jface.viewers.ISelection;
8
import org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor;
9
import org.eclipse.ui.IEditorPart;
10
import org.eclipse.ui.IWorkbenchPart;
11
import org.eclipse.wst.common.snippets.internal.actions.AddToSnippetsEditorActionDelegate;
12
13
public class AddSnippetAction extends SelectionAction {
14
15
	private AddToSnippetsEditorActionDelegate addToSnippets;
16
	
17
	public AddSnippetAction(IWorkbenchPart part) {
18
		super(part);
19
		setId(FacesConfigEditor.EDITOR_ID);
20
		setText(Messages.AddSnippetAction_ADD_TO_SNIPPETS);
21
		addToSnippets = new AddToSnippetsEditorActionDelegate();
22
		addToSnippets.setActiveEditor(this, (IEditorPart) part);
23
	}
24
25
	@Override
26
	protected boolean calculateEnabled() {
27
		return true;
28
	}
29
30
	@Override
31
	protected List getSelectedObjects() {
32
		return super.getSelectedObjects();
33
	}
34
35
	@Override
36
	protected ISelection getSelection() {
37
		return super.getSelection();
38
	}
39
40
	@Override
41
	protected void execute(Command command) {
42
		super.execute(command);
43
	}
44
45
	@Override
46
	public void run() {
47
		super.run();
48
		addToSnippets.run(this);
49
	}
50
51
}
(-)src/org/eclipse/jst/jsf/facesconfig/ui/snippets/FacesXmlProvider.java (+117 lines)
Added Link Here
1
package org.eclipse.jst.jsf.facesconfig.ui.snippets;
2
3
import java.io.IOException;
4
import java.util.ArrayList;
5
import java.util.List;
6
7
import org.eclipse.core.resources.IFile;
8
import org.eclipse.core.resources.IProject;
9
import org.eclipse.core.resources.ResourcesPlugin;
10
import org.eclipse.core.runtime.IPath;
11
import org.eclipse.core.runtime.IStatus;
12
import org.eclipse.emf.common.util.EList;
13
import org.eclipse.emf.common.util.URI;
14
import org.eclipse.emf.ecore.resource.Resource;
15
import org.eclipse.emf.ecore.resource.ResourceSet;
16
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
17
import org.eclipse.jface.viewers.ISelection;
18
import org.eclipse.jface.viewers.IStructuredSelection;
19
import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType;
20
import org.eclipse.jst.jsf.facesconfig.emf.NavigationRuleType;
21
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.PageflowEditor;
22
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.editpart.PageflowNodeEditPart;
23
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.model.PageflowPackage;
24
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.synchronization.FC2PFTransformer;
25
import org.eclipse.wst.common.componentcore.ComponentCore;
26
import org.eclipse.wst.common.snippets.internal.AbstractSnippetProvider;
27
import org.eclipse.wst.common.snippets.internal.model.SnippetManager;
28
import org.eclipse.wst.common.snippets.ui.ISnippetInsertion;
29
30
/**
31
 * @author I024096
32
 *
33
 */
34
public class FacesXmlProvider extends AbstractSnippetProvider {
35
36
37
38
	public String getId() {
39
		return FacesXmlProvider.class.getCanonicalName();
40
	}
41
42
	public ISnippetInsertion getSnippetInstertion() {
43
		return new NavigationSnippetInsertion();
44
	}
45
46
	public boolean isActionEnabled(ISelection selection) {
47
		return false;
48
	}
49
50
	public IStatus saveAdditionalContent(IPath path) {
51
		ISelection selection = fEditorPart.getEditorSite().getSelectionProvider().getSelection();
52
		
53
		IPath path_for_model = ((PageflowEditor)fEditorPart).getPageflowManager().getPath();
54
		IFile containerForLocation = ResourcesPlugin.getWorkspace().getRoot().getFile(path_for_model);
55
		IProject project = containerForLocation.getProject();
56
		
57
		FC2PFTransformer modelsTransform = ((PageflowEditor)fEditorPart).getModelsTransform();
58
		FacesConfigType facesConfig = modelsTransform.getFacesConfig();
59
		Object[] selectedJSF = ((IStructuredSelection)selection).toArray();
60
		List<NavigationRuleType> result = new ArrayList<NavigationRuleType>();
61
		
62
		for (Object object : selectedJSF) {
63
			PageflowNodeEditPart node = (PageflowNodeEditPart) object;
64
			result.addAll(getNavigation(facesConfig, (String) node.getPageflowElement().getFCElements().get(PageflowPackage.PF_PAGE__PATH)));
65
		}
66
		
67
		copyJsp(result, project, path);
68
		
69
		ResourceSet rset = new ResourceSetImpl();
70
		Resource resource = rset.createResource(URI.createFileURI(path.append("faces-config-snippet.xml").toOSString())); //$NON-NLS-1$
71
		resource.getContents().addAll(result);
72
		
73
		try {
74
			resource.save(null);
75
		} catch (IOException e) {
76
			e.printStackTrace();
77
		}
78
		
79
		return null;
80
	}
81
82
	private void copyJsp(List<NavigationRuleType> navRules, IProject project, IPath savePath) {
83
		IPath webContentPath = getWebContentPath(project);
84
		List<IPath> filesToStore = new ArrayList<IPath>();
85
		for (NavigationRuleType navigationRuleType : navRules) {
86
			String jspPath = navigationRuleType.getFromViewId().getTextContent();
87
			IPath jsp = webContentPath.append(jspPath);
88
			filesToStore.add(jsp);
89
		}
90
		SnippetManager.getInstance().moveFilesInStorageFolder(savePath, filesToStore, project);
91
	}
92
93
	private List<NavigationRuleType> getNavigation(FacesConfigType facesConfig, String name) {
94
		EList navigationRule = facesConfig.getNavigationRule();
95
		List<NavigationRuleType> result = new ArrayList<NavigationRuleType>();
96
		for (Object object : navigationRule) {
97
			NavigationRuleType nrt = (NavigationRuleType) object;
98
			String textContent = nrt.getFromViewId().getTextContent();
99
			if (name.equals(textContent)){
100
				result.add(nrt);
101
			}
102
		}
103
		return result;
104
	}
105
	
106
	/**
107
	 * @param project
108
	 * @return Web Content path as saved in component properties.
109
	 */
110
	public static IPath getWebContentPath(IProject project) {
111
		if (project != null) {
112
			return ComponentCore.createComponent(project).getRootFolder().getUnderlyingFolder().getProjectRelativePath();
113
		}
114
		return null;
115
	}
116
	
117
}

Return to bug 282114