1 /*******************************************************************************
2  * Copyright (c) 2000, 2008 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.ltk.internal.ui.refactoring;
15 
16 import java.util.List;
17 
18 import org.eclipse.core.runtime.Assert;
19 import org.eclipse.core.runtime.CoreException;
20 
21 import org.eclipse.jface.resource.ImageDescriptor;
22 
23 import org.eclipse.jface.text.IRegion;
24 
25 import org.eclipse.ltk.core.refactoring.Change;
26 import org.eclipse.ltk.core.refactoring.GroupCategory;
27 import org.eclipse.ltk.core.refactoring.GroupCategorySet;
28 import org.eclipse.ltk.core.refactoring.TextEditBasedChange;
29 import org.eclipse.ltk.core.refactoring.TextEditBasedChangeGroup;
30 import org.eclipse.ltk.ui.refactoring.ChangePreviewViewerInput;
31 import org.eclipse.ltk.ui.refactoring.IChangePreviewViewer;
32 import org.eclipse.ltk.ui.refactoring.TextEditChangeNode;
33 
34 public final class TextEditGroupNode extends TextEditChangeNode.ChildNode {
35 
36 	private TextEditBasedChangeGroup fChangeGroup;
37 
TextEditGroupNode(PreviewNode parent, TextEditBasedChangeGroup changeGroup)38 	public TextEditGroupNode(PreviewNode parent, TextEditBasedChangeGroup changeGroup) {
39 		super(parent);
40 		fChangeGroup= changeGroup;
41 		Assert.isNotNull(fChangeGroup);
42 	}
43 
44 	/**
45 	 * Returns the <code>TextEditBasedChangeGroup</code> managed by this node.
46 	 *
47 	 * @return the <code>TextEditBasedChangeGroup</code>
48 	 */
getChangeGroup()49 	TextEditBasedChangeGroup getChangeGroup() {
50 		return fChangeGroup;
51 	}
52 
53 	@Override
getText()54 	public String getText() {
55 		return fChangeGroup.getName();
56 	}
57 
58 	@Override
getImageDescriptor()59 	public ImageDescriptor getImageDescriptor() {
60 		return RefactoringPluginImages.DESC_OBJS_TEXT_EDIT;
61 	}
62 
63 	@Override
getChangePreviewViewerDescriptor()64 	ChangePreviewViewerDescriptor getChangePreviewViewerDescriptor() throws CoreException {
65 		InternalTextEditChangeNode element= getTextEditChangeNode();
66 		if (element == null)
67 			return null;
68 		return element.getChangePreviewViewerDescriptor();
69 	}
70 
71 	@Override
feedInput(IChangePreviewViewer viewer, List<GroupCategory> categories)72 	void feedInput(IChangePreviewViewer viewer, List<GroupCategory> categories) throws CoreException {
73 		InternalTextEditChangeNode element= getTextEditChangeNode();
74 		if (element != null) {
75 			Change change= element.getChange();
76 			if (change instanceof TextEditBasedChange) {
77 				IRegion range= getTextRange(this);
78 				ChangePreviewViewerInput input= null;
79 				if (range != null) {
80 					input= TextEditChangePreviewViewer.createInput(change, new TextEditBasedChangeGroup[] {fChangeGroup}, range);
81 				} else {
82 					input= TextEditChangePreviewViewer.createInput(change, fChangeGroup, 2);
83 				}
84 				viewer.setInput(input);
85 			}
86 		} else {
87 			viewer.setInput(null);
88 		}
89 	}
90 
91 	@Override
setEnabled(boolean enabled)92 	void setEnabled(boolean enabled) {
93 		fChangeGroup.setEnabled(enabled);
94 	}
95 
96 	@Override
setEnabledShallow(boolean enabled)97 	void setEnabledShallow(boolean enabled) {
98 		fChangeGroup.setEnabled(enabled);
99 	}
100 
101 	@Override
getActive()102 	int getActive() {
103 		return fChangeGroup.isEnabled() ? PreviewNode.ACTIVE : PreviewNode.INACTIVE;
104 	}
105 
106 	@Override
getChildren()107 	PreviewNode[] getChildren() {
108 		return PreviewNode.EMPTY_CHILDREN;
109 	}
110 
111 	@Override
hasOneGroupCategory(List<GroupCategory> categories)112 	boolean hasOneGroupCategory(List<GroupCategory> categories) {
113 		return fChangeGroup.getGroupCategorySet().containsOneCategory(categories);
114 	}
115 
116 	@Override
hasDerived()117 	boolean hasDerived() {
118 		return false;
119 	}
120 
getGroupCategorySet()121 	GroupCategorySet getGroupCategorySet() {
122 		return fChangeGroup.getGroupCategorySet();
123 	}
124 
getTextRange(PreviewNode element)125 	private static IRegion getTextRange(PreviewNode element) throws CoreException {
126 		if (element == null)
127 			return null;
128 		if (element instanceof InternalLanguageElementNode) {
129 			return ((InternalLanguageElementNode)element).getTextRange();
130 		} else if (element instanceof TextEditChangeNode) {
131 			return null;
132 		}
133 		return getTextRange(element.getParent());
134 	}
135 }
136