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