diff options
Diffstat (limited to 'bundles/org.eclipse.compare/compare/org/eclipse/compare/internal')
72 files changed, 0 insertions, 11065 deletions
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java deleted file mode 100644 index d6c202174..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.Viewer; - - -public abstract class AbstractViewer extends Viewer { - - public void setInput(Object input) { - } - - public Object getInput() { - return null; - } - - public ISelection getSelection() { - return null; - } - - public void setSelection(ISelection s, boolean reveal) { - } - - public void refresh() { - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java deleted file mode 100644 index 51892e496..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - - -public class AddFromHistoryAction extends BaseCompareAction { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.AddFromHistoryAction"; //$NON-NLS-1$ - - public AddFromHistoryAction() { - } - - protected boolean isEnabled(ISelection selection) { - return Utilities.getResources(selection).length == 1; - } - - protected void run(ISelection selection) { - - ResourceBundle bundle= ResourceBundle.getBundle(BUNDLE_NAME); - String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$ - - Shell parentShell= CompareUIPlugin.getShell(); - AddFromHistoryDialog dialog= null; - - Object[] s= Utilities.getResources(selection); - - for (int i= 0; i < s.length; i++) { - Object o= s[i]; - if (o instanceof IContainer) { - IContainer container= (IContainer) o; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell); - IProgressMonitor pm= pmdialog.getProgressMonitor(); - IFile[] states= null; - try { - states= container.findDeletedMembersWithHistory(IResource.DEPTH_INFINITE, pm); - } catch (CoreException ex) { - pm.done(); - } - - if (states == null || states.length <= 0) { - String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$ - MessageDialog.openInformation(parentShell, title, msg); - return; - } - - if (dialog == null) { - dialog= new AddFromHistoryDialog(parentShell, bundle); - dialog.setHelpContextId(ICompareContextIds.ADD_FROM_HISTORY_DIALOG); - } - - if (dialog.select(container, states)) { - - AddFromHistoryDialog.HistoryInput[] selected= dialog.getSelected(); - - if (selected != null && selected.length > 0) { - try { - updateWorkspace(bundle, parentShell, selected); - - } catch (InterruptedException x) { - // Do nothing. Operation has been canceled by user. - - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$ - } - } - } - } - } - } - - void createContainers(IResource resource) throws CoreException { - IContainer container= resource.getParent(); - if (container instanceof IFolder) { - IFolder parent= (IFolder) container; - if (parent != null && !parent.exists()) { - createContainers(parent); - parent.create(false, true, null); - } - } - } - - private void updateWorkspace(final ResourceBundle bundle, Shell shell, - final AddFromHistoryDialog.HistoryInput[] selected) - throws InvocationTargetException, InterruptedException { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws InvocationTargetException { - try { - String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$ - pm.beginTask(taskName, selected.length); - - for (int i= 0; i < selected.length; i++) { - IFile file= selected[i].fFile; - IFileState fileState= selected[i].fFileState; - createContainers(file); - - SubProgressMonitor subMonitor= new SubProgressMonitor(pm, 1); - try { - file.create(fileState.getContents(), false, subMonitor); - } finally { - subMonitor.done(); - } - } - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - pm.done(); - } - } - }; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell); - pmdialog.run(false, true, operation); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties deleted file mode 100644 index e25207118..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.properties +++ /dev/null @@ -1,45 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)AddFromHistoryAction.properties -# -# Resources for AddFromHistoryAction.java - -title= Restore from Local History - -memberPaneTitle= {0} - Available Files in Local History: - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -memberDescription= Check files to restore from the local history: -editionDescription= Select an edition of a file: - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= {0} - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -buttonLabel= Restore - -noLocalHistoryError= No deleted resources in local history for selected container. -replaceError=Can''t replace resource (reason: {0}). - -taskName=Restoring
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java deleted file mode 100644 index 3fd546aef..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryDialog.java +++ /dev/null @@ -1,468 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.text.*; -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; - - -public class AddFromHistoryDialog extends ResizableDialog { - - static class HistoryInput implements ITypedElement, IStreamContentAccessorExtension2, IModificationDate { - IFile fFile; - IFileState fFileState; - - HistoryInput(IFile file, IFileState fileState) { - fFile= file; - fFileState= fileState; - } - public InputStream getContents() throws CoreException { - return new BufferedInputStream(fFileState.getContents()); - } - public String getCharset() { - Utilities.guessCharset(fFile.getName()); - return Utilities.getCharset(fFile); - } - public String getName() { - return fFile.getName(); - } - public String getType() { - return fFile.getFileExtension(); - } - public Image getImage() { - return CompareUI.getImage(fFile); - } - public long getModificationDate() { - return fFileState.getModificationTime(); - } - } - - static class FileHistory { - private IFile fFile; - private IFileState[] fStates; - private int fSelected; - - FileHistory(IFile file) { - fFile= file; - } - - IFile getFile() { - return fFile; - } - - IFileState[] getStates() { - if (fStates == null) { - try { - fStates= fFile.getHistory(new NullProgressMonitor()); - } catch (CoreException ex) { - // NeedWork - } - } - return fStates; - } - - IFileState getSelectedState() { - return getStates()[fSelected]; - } - - void setSelected(IFileState state) { - for (int i= 0; i < fStates.length; i++) { - if (fStates[i] == state) { - fSelected= i; - return; - } - } - } - - HistoryInput getHistoryInput() { - return new HistoryInput(fFile, getSelectedState()); - } - - boolean isSelected(int index) { - return index == fSelected; - } - } - - private CompareConfiguration fCompareConfiguration; - private ArrayList fArrayList= new ArrayList(); - private FileHistory fCurrentFileHistory; - - // SWT controls - private CompareViewerSwitchingPane fContentPane; - private Button fCommitButton; - private Table fMemberTable; - private CompareViewerPane fMemberPane; - private Tree fEditionTree; - private CompareViewerPane fEditionPane; - private Image fDateImage; - private Image fTimeImage; - - - public AddFromHistoryDialog(Shell parent, ResourceBundle bundle) { - super(parent, bundle); - - String iconName= Utilities.getString(fBundle, "dateIcon", "obj16/day_obj.gif"); //$NON-NLS-2$ //$NON-NLS-1$ - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fDateImage= id.createImage(); - iconName= Utilities.getString(fBundle, "timeIcon", "obj16/resource_obj.gif"); //$NON-NLS-1$ //$NON-NLS-2$ - id= CompareUIPlugin.getImageDescriptor(iconName); - if (id != null) - fTimeImage= id.createImage(); - } - - public boolean select(IContainer root, IFile[] inputFiles) { - - create(); // create widgets - - String format= Utilities.getString(fBundle, "memberPaneTitle"); //$NON-NLS-1$ - String title= MessageFormat.format(format, new Object[] { root.getName() }); - fMemberPane.setImage(CompareUI.getImage(root)); - fMemberPane.setText(title); - - // sort input files - final int count= inputFiles.length; - final IFile[] files= new IFile[count]; - for (int i= 0; i < count; i++) - files[i]= inputFiles[i]; - if (count > 1) - internalSort(files, 0, count-1); - - - String prefix= root.getFullPath().toString(); - - if (fMemberTable != null && !fMemberTable.isDisposed()) { - for (int i= 0; i < files.length; i++) { - IFile file= files[i]; - String path= file.getFullPath().toString(); - if (path.startsWith(prefix)) - path= path.substring(prefix.length()+1); - TableItem ti= new TableItem(fMemberTable, SWT.NONE); - ti.setImage(CompareUI.getImage(file)); - ti.setText(path); - ti.setData(new FileHistory(file)); - } - } - - open(); - - return (getReturnCode() == OK) && (fArrayList.size() > 0); - } - - HistoryInput[] getSelected() { - HistoryInput[] selected= new HistoryInput[fArrayList.size()]; - Iterator iter= fArrayList.iterator(); - for (int i= 0; iter.hasNext(); i++) { - FileHistory h= (FileHistory) iter.next(); - selected[i]= h.getHistoryInput(); - } - return selected; - } - - protected synchronized Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - getShell().setText(Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - org.eclipse.compare.Splitter vsplitter= new org.eclipse.compare.Splitter(parent, SWT.VERTICAL); - vsplitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - vsplitter.addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fDateImage != null) - fDateImage.dispose(); - if (fTimeImage != null) - fTimeImage.dispose(); - } - } - ); - - // we need two panes: the left for the elements, the right one for the editions - Splitter hsplitter= new Splitter(vsplitter, SWT.HORIZONTAL); - - Composite c= new Composite(hsplitter, SWT.NONE); - GridLayout layout= new GridLayout(); - layout.marginWidth= 0; - layout.marginHeight= 2; - layout.verticalSpacing= 2; - layout.numColumns= 1; - c.setLayout(layout); - Label l1= new Label(c, SWT.NONE); - l1.setText(Utilities.getString(fBundle, "memberDescription")); //$NON-NLS-1$ - fMemberPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT); - GridData gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - fMemberPane.setLayoutData(gd); - - fMemberTable= new Table(fMemberPane, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL); - fMemberTable.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (e.detail == SWT.CHECK) { - if (e.item instanceof TableItem) { - TableItem ti= (TableItem) e.item; - if (ti.getChecked()) - fArrayList.add(ti.getData()); - else - fArrayList.remove(ti.getData()); - - if (fCommitButton != null) - fCommitButton.setEnabled(fArrayList.size() > 0); - } - } else { - handleMemberSelect(e.item); - } - } - } - ); - - fMemberPane.setContent(fMemberTable); - - c= new Composite(hsplitter, SWT.NONE); - layout= new GridLayout(); - layout.marginWidth= 0; - layout.marginHeight= 2; - layout.verticalSpacing= 2; - layout.numColumns= 1; - c.setLayout(layout); - Label l2= new Label(c, SWT.NONE); - l2.setText(Utilities.getString(fBundle, "editionDescription")); //$NON-NLS-1$ - fEditionPane= new CompareViewerPane(c, SWT.BORDER | SWT.FLAT); - gd= new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); - fEditionPane.setLayoutData(gd); - - fEditionTree= new Tree(fEditionPane, SWT.H_SCROLL | SWT.V_SCROLL); - fEditionTree.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - feedContent(e.item); - } - } - ); - fEditionPane.setContent(fEditionTree); - - applyDialogFont(parent); // to avoid applying font to compare viewer - fContentPane= new CompareViewerSwitchingPane(vsplitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUIPlugin.findContentViewer(oldViewer, input, this, fCompareConfiguration); - } - }; - vsplitter.setWeights(new int[] { 30, 70 }); - - return parent; - } - - /** - * Feeds selection from member viewer to edition viewer. - */ - private void handleMemberSelect(Widget w) { - Object data= null; - if (w != null) - data= w.getData(); - if (data instanceof FileHistory) { - - FileHistory h= (FileHistory) data; - fCurrentFileHistory= h; - - IFile file= h.getFile(); - IFileState[] states= h.getStates(); - - fEditionPane.setImage(CompareUI.getImage(file)); - String pattern= Utilities.getString(fBundle, "treeTitleFormat"); //$NON-NLS-1$ - String title= MessageFormat.format(pattern, new Object[] { file.getName() }); - fEditionPane.setText(title); - - if (fEditionTree != null) { - fEditionTree.setRedraw(false); - fEditionTree.removeAll(); - for (int i= 0; i < states.length; i++) { - addEdition(new HistoryInput(file, states[i]), h.isSelected(i)); - } - fEditionTree.setRedraw(true); - } - } else - fCurrentFileHistory= null; - } - - /** - * Adds the given Pair to the edition tree. - * It takes care of creating tree nodes for different dates. - */ - private void addEdition(HistoryInput input, boolean isSelected) { - if (fEditionTree == null || fEditionTree.isDisposed()) - return; - - IFileState state= input.fFileState; - - // find last day - TreeItem[] days= fEditionTree.getItems(); - TreeItem lastDay= null; - if (days.length > 0) - lastDay= days[days.length-1]; - - long ldate= state.getModificationTime(); - long day= dayNumber(ldate); - Date date= new Date(ldate); - if (lastDay == null || day != dayNumber(((Date)lastDay.getData()).getTime())) { - lastDay= new TreeItem(fEditionTree, SWT.NONE); - lastDay.setImage(fDateImage); - String df= DateFormat.getDateInstance().format(date); - long today= dayNumber(System.currentTimeMillis()); - - String formatKey; - if (day == today) - formatKey= "todayFormat"; //$NON-NLS-1$ - else if (day == today-1) - formatKey= "yesterdayFormat"; //$NON-NLS-1$ - else - formatKey= "dayFormat"; //$NON-NLS-1$ - String pattern= Utilities.getString(fBundle, formatKey); - if (pattern != null) - df= MessageFormat.format(pattern, new String[] { df }); - lastDay.setText(df); - lastDay.setData(date); - } - TreeItem ti= new TreeItem(lastDay, SWT.NONE); - ti.setImage(fTimeImage); - ti.setText(DateFormat.getTimeInstance().format(date)); - ti.setData(input); - - if (isSelected) { - lastDay.setExpanded(true); - fEditionTree.setSelection(new TreeItem[] { ti }); - feedContent(ti); - } - } - - /** - * Returns the number of s since Jan 1st, 1970. - * The given date is converted to GMT and daylight saving is taken into account too. - */ - private long dayNumber(long date) { - int ONE_DAY_MS= 24*60*60 * 1000; // one day in milli seconds - - Calendar calendar= Calendar.getInstance(); - long localTimeOffset= calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET); - - return (date + localTimeOffset) / ONE_DAY_MS; - } - - /** - * Feeds the tree viewer's selection to the contentviewer - */ - private void feedContent(Widget w) { - if (fContentPane != null && !fContentPane.isDisposed()) { - Object o= w.getData(); - if (o instanceof HistoryInput) { - HistoryInput selected= (HistoryInput) o; - fContentPane.setInput(selected); - fContentPane.setText(getEditionLabel(selected)); - fContentPane.setImage(fTimeImage); - - if (fCurrentFileHistory != null) - fCurrentFileHistory.setSelected(selected.fFileState); - } else { - fContentPane.setInput(null); - } - } - } - - protected String getEditionLabel(HistoryInput input) { - String format= Utilities.getString(fBundle, "historyEditionLabel", null); //$NON-NLS-1$ - if (format == null) - format= Utilities.getString(fBundle, "editionLabel"); //$NON-NLS-1$ - if (format == null) - format= "x{0}"; //$NON-NLS-1$ - - long modDate= input.getModificationDate(); - String date= DateFormat.getDateTimeInstance().format(new Date(modDate)); - - return MessageFormat.format(format, new Object[] { date }); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - String buttonLabel= Utilities.getString(fBundle, "buttonLabel", IDialogConstants.OK_LABEL); //$NON-NLS-1$ - // a 'Cancel' and a 'Add' button - fCommitButton= createButton(parent, IDialogConstants.OK_ID, buttonLabel, true); - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - /** - * Returns true if the pathname of f1 comes after f2 - */ - private static boolean greaterThan(IFile f1, IFile f2) { - String[] ss1= f1.getFullPath().segments(); - String[] ss2= f2.getFullPath().segments(); - int l1= ss1.length; - int l2= ss2.length; - int n= Math.max(l1, l2); - - for (int i= 0; i < n; i++) { - String s1= i < l1 ? ss1[i] : ""; //$NON-NLS-1$ - String s2= i < l2 ? ss2[i] : ""; //$NON-NLS-1$ - int rc= s1.compareToIgnoreCase(s2); - if (rc != 0) - return rc < 0; - } - return false; - } - - private static void internalSort(IFile[] keys, int left, int right) { - - int original_left= left; - int original_right= right; - - IFile mid= keys[(left + right) / 2]; - do { - while (greaterThan(keys[left], mid)) - left++; - - while (greaterThan(mid, keys[right])) - right--; - - if (left <= right) { - IFile tmp= keys[left]; - keys[left]= keys[right]; - keys[right]= tmp; - left++; - right--; - } - } while (left <= right); - - if (original_left < right) - internalSort(keys, original_left, right); - - if (left < original_right) - internalSort(keys, left, original_right); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java deleted file mode 100644 index 7771b93d3..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IActionDelegate; - - -public abstract class BaseCompareAction implements IActionDelegate { - - private ISelection fSelection; - - /* (non-Javadoc) - * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) - */ - final public void run(IAction action) { - run(fSelection); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) - */ - final public void selectionChanged(IAction action, ISelection selection) { - fSelection= selection; - if (action != null) - action.setEnabled(isEnabled(fSelection)); - } - - protected boolean isEnabled(ISelection selection) { - return false; - } - - abstract protected void run(ISelection selection); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java deleted file mode 100644 index 41b23e86d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.util.ResourceBundle; -import java.text.MessageFormat; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - -/** - * A simple compare viewer for binary files. - * Shows the position of the first non-matching byte. - */ -public class BinaryCompareViewer extends AbstractViewer { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.BinaryCompareViewerResources"; //$NON-NLS-1$ - - private static final int EOF= -1; - private Text fControl; - private ICompareInput fInput; - private ResourceBundle fBundle; - private boolean fLeftIsLocal; - - - public BinaryCompareViewer(Composite parent, CompareConfiguration cc) { - - WorkbenchHelp.setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW); - - fBundle= ResourceBundle.getBundle(BUNDLE_NAME); - - fControl= new Text(parent, SWT.NONE); - fControl.setEditable(false); - fControl.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title")); //$NON-NLS-1$ - - fLeftIsLocal= Utilities.getBoolean(cc, "LEFT_IS_LOCAL", false); //$NON-NLS-1$ - } - - public Control getControl() { - return fControl; - } - - public void setInput(Object input) { - if (fControl != null && input instanceof ICompareInput) { - fInput= (ICompareInput) input; - - InputStream left= null; - InputStream right= null; - - String message= null; - try { - left= getStream(fInput.getLeft()); - right= getStream(fInput.getRight()); - - if (left != null && right != null) { - int pos= 0; - while (true) { - int l= left.read(); - int r= right.read(); - if (l != r) { - String format= Utilities.getString(fBundle, "diffMessageFormat"); //$NON-NLS-1$ - message= MessageFormat.format(format, new String[] { Integer.toString(pos) } ); - break; - } - if (l == EOF) - break; - pos++; - } - } else if (left == null && right == null) { - message= Utilities.getString(fBundle, "deleteConflictMessage"); //$NON-NLS-1$ - } else if (left == null) { - if (fLeftIsLocal) - message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$ - else - message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$ - } else if (right == null) { - if (fLeftIsLocal) - message= Utilities.getString(fBundle, "addedMessage"); //$NON-NLS-1$ - else - message= Utilities.getString(fBundle, "deletedMessage"); //$NON-NLS-1$ - } - } catch (CoreException ex) { - message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$ - } catch (IOException ex) { - message= Utilities.getString(fBundle, "errorMessage"); //$NON-NLS-1$ - } finally { - if (left != null) { - try { - left.close(); - } catch (IOException ex) { - // silently ignored - } - } - if (right != null) { - try { - right.close(); - } catch (IOException ex) { - // silently ignored - } - } - } - if (message != null) - fControl.setText(message); - } - } - - public Object getInput() { - return fInput; - } - - private InputStream getStream(ITypedElement input) throws CoreException { - if (input instanceof IStreamContentAccessor) - return ((IStreamContentAccessor)input).getContents(); - return null; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java deleted file mode 100644 index 8c98ec6ff..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerCreator.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; - -/** - * A factory object for the <code>BinaryCompareViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class BinaryCompareViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new BinaryCompareViewer(parent, mp); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties deleted file mode 100644 index dbfc7d70e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewerResources.properties +++ /dev/null @@ -1,22 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)BinaryCompareViewerResources.properties -# -# Resource strings for BinaryCompareViewer.java - -title= Binary Compare - -diffMessageFormat= First bytes differ at position {0} -deleteConflictMessage= Delete Conflict -addedMessage= Added Resource -deletedMessage= Removed Resource -errorMessage= Internal Error diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java deleted file mode 100644 index 79b34255d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.events.*; - -/** - * A Canvas which reduces flicker by drawing in an off screen buffer. - */ -public abstract class BufferedCanvas extends Canvas { - - //private static final boolean USE_DOUBLE_BUFFER= !"carbon".equals(SWT.getPlatform()); //$NON-NLS-1$ - private static final boolean USE_DOUBLE_BUFFER= true; - - /** The drawable for double buffering */ - Image fBuffer; - - public BufferedCanvas(Composite parent, int flags) { - super(parent, flags + SWT.NO_BACKGROUND); - - addPaintListener( - new PaintListener() { - public void paintControl(PaintEvent event) { - doubleBufferPaint(event.gc); - } - } - ); - - addDisposeListener( - new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fBuffer != null) { - fBuffer.dispose(); - fBuffer= null; - } - } - } - ); - } - - public void repaint() { - if (!isDisposed()) { - GC gc= new GC(this); - doubleBufferPaint(gc); - gc.dispose(); - } - } - - /** - * Double buffer drawing. - */ - void doubleBufferPaint(GC dest) { - - if (!USE_DOUBLE_BUFFER) { - doPaint(dest); - return; - } - - Point size= getSize(); - - if (size.x <= 1 || size.y <= 1) // we test for <= 1 because on X11 controls have initial size 1,1 - return; - - if (fBuffer != null) { - Rectangle r= fBuffer.getBounds(); - if (r.width != size.x || r.height != size.y) { - fBuffer.dispose(); - fBuffer= null; - } - } - if (fBuffer == null) - fBuffer= new Image(getDisplay(), size.x, size.y); - - GC gc= new GC(fBuffer); - try { - gc.setBackground(getBackground()); - gc.fillRectangle(0, 0, size.x, size.y); - doPaint(gc); - } finally { - gc.dispose(); - } - - dest.drawImage(fBuffer, 0, 0); - } - - abstract public void doPaint(GC gc); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java deleted file mode 100644 index e2c0b0c9e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java +++ /dev/null @@ -1,119 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.IStructureComparator; - -/** - * A buffer for a workspace resource. - */ -public class BufferedResourceNode extends ResourceNode { - - private boolean fDirty= false; - private IFile fDeleteFile; - - /** - * Creates a <code>ResourceNode</code> for the given resource. - * - * @param resource the resource - */ - public BufferedResourceNode(IResource resource) { - super(resource); - } - - protected IStructureComparator createChild(IResource child) { - return new BufferedResourceNode(child); - } - - public void setContent(byte[] contents) { - fDirty= true; - super.setContent(contents); - } - - /** - * Commits buffered contents to resource. - */ - public void commit(IProgressMonitor pm) throws CoreException { - if (fDirty) { - - if (fDeleteFile != null) { - fDeleteFile.delete(true, true, pm); - return; - } - - IResource resource= getResource(); - if (resource instanceof IFile) { - ByteArrayInputStream is= new ByteArrayInputStream(getContent()); - try { - IFile file= (IFile) resource; - if (file.exists()) - file.setContents(is, false, true, pm); - else - file.create(is, false, pm); - fDirty= false; - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - // Silently ignored - } - } - } - } - } - - public ITypedElement replace(ITypedElement child, ITypedElement other) { - - if (child == null) { // add resource - // create a node without a resource behind it! - IResource resource= getResource(); - if (resource instanceof IFolder) { - IFolder folder= (IFolder) resource; - IFile file= folder.getFile(other.getName()); - child= new BufferedResourceNode(file); - } - } - - if (other == null) { // delete resource - IResource resource= getResource(); - if (resource instanceof IFolder) { - IFolder folder= (IFolder) resource; - IFile file= folder.getFile(child.getName()); - if (file != null && file.exists()) { - fDeleteFile= file; - fDirty= true; - } - } - return null; - } - - if (other instanceof IStreamContentAccessor && child instanceof IEditableContent) { - IEditableContent dst= (IEditableContent) child; - - try { - InputStream is= ((IStreamContentAccessor)other).getContents(); - byte[] bytes= Utilities.readBytes(is); - if (bytes != null) - dst.setContent(bytes); - } catch (CoreException ex) { - // NeedWork - } - } - return child; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java deleted file mode 100644 index 824ed3e1c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.jface.action.Action; -import org.eclipse.compare.CompareConfiguration; - -/** - * Toggles a boolean property of an <code>ICompareConfiguration</code>. - */ -public class ChangePropertyAction extends Action { - - private CompareConfiguration fCompareConfiguration; - private String fPropertyKey; - private ResourceBundle fBundle; - private String fPrefix; - - - public ChangePropertyAction(ResourceBundle bundle, CompareConfiguration cc, String rkey, String pkey) { - fPropertyKey= pkey; - fBundle= bundle; - fPrefix= rkey; - Utilities.initAction(this, fBundle, fPrefix); - setCompareConfiguration(cc); - } - - public void run() { - boolean b= !Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false); - setChecked(b); - if (fCompareConfiguration != null) - fCompareConfiguration.setProperty(fPropertyKey, new Boolean(b)); - } - - public void setChecked(boolean state) { - super.setChecked(state); - Utilities.initToggleAction(this, fBundle, fPrefix, state); - } - - public void setCompareConfiguration(CompareConfiguration cc) { - fCompareConfiguration= cc; - setChecked(Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false)); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java deleted file mode 100644 index 787c3fb26..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ColorEditor.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.ColorDialog; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; - -import org.eclipse.jface.resource.JFaceResources; - -/** - * A "button" of a certain color determined by the color picker. - */ -public class ColorEditor { - - private Point fExtent; - private Image fImage; - private RGB fColorValue; - private Color fColor; - private Button fButton; - - public ColorEditor(Composite parent) { - - fButton= new Button(parent, SWT.PUSH); - fExtent= computeImageSize(parent); - fImage= new Image(parent.getDisplay(), fExtent.x, fExtent.y); - - GC gc= new GC(fImage); - gc.setBackground(fButton.getBackground()); - gc.fillRectangle(0, 0, fExtent.x, fExtent.y); - gc.dispose(); - - fButton.setImage(fImage); - fButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent event) { - ColorDialog colorDialog= new ColorDialog(fButton.getShell()); - colorDialog.setRGB(fColorValue); - RGB newColor = colorDialog.open(); - if (newColor != null) { - fColorValue= newColor; - updateColorImage(); - } - } - }); - - fButton.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent event) { - if (fImage != null) { - fImage.dispose(); - fImage= null; - } - if (fColor != null) { - fColor.dispose(); - fColor= null; - } - } - }); - } - - public RGB getColorValue() { - return fColorValue; - } - - public void setColorValue(RGB rgb) { - fColorValue= rgb; - updateColorImage(); - } - - public Button getButton() { - return fButton; - } - - protected void updateColorImage() { - - Display display= fButton.getDisplay(); - - GC gc= new GC(fImage); - gc.setForeground(display.getSystemColor(SWT.COLOR_BLACK)); - gc.drawRectangle(0, 2, fExtent.x - 1, fExtent.y - 4); - - if (fColor != null) - fColor.dispose(); - - fColor= new Color(display, fColorValue); - gc.setBackground(fColor); - gc.fillRectangle(1, 3, fExtent.x - 2, fExtent.y - 5); - gc.dispose(); - - fButton.setImage(fImage); - } - - protected Point computeImageSize(Control window) { - GC gc= new GC(window); - Font f= JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT); - gc.setFont(f); - int height= gc.getFontMetrics().getHeight(); - gc.dispose(); - Point p= new Point(height * 3 - 6, height); - return p; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java deleted file mode 100644 index 9f15d423a..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; - -import org.eclipse.ui.IObjectActionDelegate; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.CompareUI; - - -/* - * The "Compare with each other" action - */ -public class CompareAction extends BaseCompareAction implements IObjectActionDelegate { - - private ResourceCompareInput fInput; - private IWorkbenchPage fWorkbenchPage; - - - public void run(ISelection selection) { - if (fInput != null) { - fInput.setSelection(selection); - fInput.initializeCompareConfiguration(); - CompareUI.openCompareEditorOnPage(fInput, fWorkbenchPage); - fInput= null; // don't reuse this input! - } - } - - protected boolean isEnabled(ISelection selection) { - if (fInput == null) { - CompareConfiguration cc= new CompareConfiguration(); - // buffered merge mode: don't ask for confirmation - // when switching between modified resources - cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, new Boolean(false)); - - fInput= new ResourceCompareInput(cc); - } - return fInput.isEnabled(selection); - } - - public void setActivePart(IAction action, IWorkbenchPart targetPart) { - fWorkbenchPage= targetPart.getSite().getPage(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java deleted file mode 100644 index 3116aca44..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java +++ /dev/null @@ -1,124 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.OperationCanceledException; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; - -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; - - -public class CompareDialog extends ResizableDialog implements IPropertyChangeListener { - - private CompareEditorInput fCompareEditorInput; - private Button fCommitButton; - - - CompareDialog(Shell shell, CompareEditorInput input) { - super(shell, null); - - Assert.isNotNull(input); - fCompareEditorInput= input; - fCompareEditorInput.addPropertyChangeListener(this); - setHelpContextId(ICompareContextIds.COMPARE_DIALOG); - } - - public boolean close() { - if (super.close()) { - if (fCompareEditorInput != null) - fCompareEditorInput.addPropertyChangeListener(this); - return true; - } - return false; - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected void createButtonsForButtonBar(Composite parent) { - fCommitButton= createButton(parent, IDialogConstants.OK_ID, Utilities.getString("CompareDialog.commitAction.label"), true); //$NON-NLS-1$ - fCommitButton.setEnabled(false); - createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); - } - - public void propertyChange(PropertyChangeEvent event) { - if (fCommitButton != null && fCompareEditorInput != null) - fCommitButton.setEnabled(fCompareEditorInput.isSaveNeeded()); - } - - /* (non-Javadoc) - * Method declared on Dialog. - */ - protected Control createDialogArea(Composite parent2) { - - Composite parent= (Composite) super.createDialogArea(parent2); - - Control c= fCompareEditorInput.createContents(parent); - c.setLayoutData(new GridData(GridData.FILL_BOTH)); - - Shell shell= c.getShell(); - shell.setText(fCompareEditorInput.getTitle()); - shell.setImage(fCompareEditorInput.getTitleImage()); - applyDialogFont(parent); - return parent; - } - - /* (non-Javadoc) - * Method declared on Window. - */ - public int open() { - - int rc= super.open(); - - if (rc == OK && fCompareEditorInput.isSaveNeeded()) { - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws CoreException { - fCompareEditorInput.saveChanges(pm); - } - }; - - Shell shell= getParentShell(); - ProgressMonitorDialog pmd= new ProgressMonitorDialog(shell); - try { - operation.run(pmd.getProgressMonitor()); - - } catch (InterruptedException x) { - // NeedWork - } catch (OperationCanceledException x) { - // NeedWork - } catch (InvocationTargetException x) { - String title= Utilities.getString("CompareDialog.saveErrorTitle"); //$NON-NLS-1$ - String msg= Utilities.getString("CompareDialog.saveErrorMessage"); //$NON-NLS-1$ - MessageDialog.openError(shell, title, msg + x.getTargetException().getMessage()); - } - } - - return rc; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java deleted file mode 100644 index edde18e91..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditor.java +++ /dev/null @@ -1,236 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.util.*; - -import org.eclipse.ui.*; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.part.EditorPart; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; - - -/** - * A CompareEditor takes a ICompareEditorInput as input. - * Most functionality is delegated to the ICompareEditorInput. - */ -public class CompareEditor extends EditorPart implements IReusableEditor { - - /** - * Internal property change listener for handling changes in the editor's input. - */ - class PropertyChangeListener implements IPropertyChangeListener { - /* - * @see IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - CompareEditor.this.propertyChange(event); - } - } - - public final static String CONFIRM_SAVE_PROPERTY= "org.eclipse.compare.internal.CONFIRM_SAVE_PROPERTY"; //$NON-NLS-1$ - - private IActionBars fActionBars; - /** The editor's property change listener. */ - private IPropertyChangeListener fPropertyChangeListener= new PropertyChangeListener(); - /** the SWT control */ - private Control fControl; - - - public CompareEditor() { - } - - /* package */ CompareConfiguration getCompareConfiguration() { - IEditorInput input= getEditorInput(); - if (input instanceof CompareEditorInput) - return ((CompareEditorInput)input).getCompareConfiguration(); - return null; - } - - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - - if (!(input instanceof CompareEditorInput)) - throw new PartInitException(Utilities.getString("CompareEditor.invalidInput")); //$NON-NLS-1$ - - setSite(site); - setInput(input); - } - - public void setInput(IEditorInput input) { - try { - doSetInput(input); - } catch (CoreException x) { - String title= Utilities.getString("CompareEditor.error.setinput.title"); //$NON-NLS-1$ - String msg= Utilities.getString("CompareEditor.error.setinput.message"); //$NON-NLS-1$ - ErrorDialog.openError(getSite().getShell(), title, msg, x.getStatus()); - } - } - - public void doSetInput(IEditorInput input) throws CoreException { - - if (!(input instanceof CompareEditorInput)) { - IStatus s= new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, IStatus.OK, Utilities.getString("CompareEditor.invalidInput"), null); //$NON-NLS-1$ - throw new CoreException(s); - } - - IEditorInput oldInput= getEditorInput(); - if (oldInput instanceof IPropertyChangeNotifier) - ((IPropertyChangeNotifier)input).removePropertyChangeListener(fPropertyChangeListener); - - super.setInput(input); - - CompareEditorInput cei= (CompareEditorInput) input; - - setTitleImage(cei.getTitleImage()); - setTitle(cei.getTitle()); - - if (input instanceof IPropertyChangeNotifier) - ((IPropertyChangeNotifier)input).addPropertyChangeListener(fPropertyChangeListener); - - if (oldInput != null) { - if (fControl != null && !fControl.isDisposed()) { - Point oldSize= fControl.getSize(); - Composite parent= fControl.getParent(); - fControl.dispose(); - createPartControl(parent); - if (fControl != null) - fControl.setSize(oldSize); - } - } - } - - public IActionBars getActionBars() { - return fActionBars; - } - - public void setActionBars(IActionBars actionBars) { - fActionBars= actionBars; - } - - /* - * @see IDesktopPart#createPartControl(Composite) - */ - public void createPartControl(Composite parent) { - parent.setData(this); - - IEditorInput input= getEditorInput(); - if (input instanceof CompareEditorInput) { - fControl= ((CompareEditorInput) input).createContents(parent); - WorkbenchHelp.setHelp(fControl, ICompareContextIds.COMPARE_EDITOR); - } - } - - /* - * @see DesktopPart#dispose - */ - public void dispose() { - - IEditorInput input= getEditorInput(); - if (input instanceof IPropertyChangeNotifier) - ((IPropertyChangeNotifier)input).removePropertyChangeListener(fPropertyChangeListener); - - super.dispose(); - - fPropertyChangeListener= null; - } - - /* - * @see IDesktopPart#setFocus - */ - public void setFocus() { - IEditorInput input= getEditorInput(); - if (input instanceof CompareEditorInput) - ((CompareEditorInput)input).setFocus(); - } - - /** - * Returns false because the editor doesn't support "Save As...". - */ - public boolean isSaveAsAllowed() { - return false; - } - - public void gotoMarker(IMarker marker) { - } - - /** - * Always throws an AssertionFailedException. - */ - /* - * @see IEditorPart#doSaveAs() - */ - public void doSaveAs() { - Assert.isTrue(false); // Save As not supported for CompareEditor - } - - /* - * @see IEditorPart#doSave() - */ - public void doSave(IProgressMonitor progressMonitor) { - - final IEditorInput input= getEditorInput(); - - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws CoreException { - if (input instanceof CompareEditorInput) - ((CompareEditorInput)input).saveChanges(pm); - } - }; - - Shell shell= getSite().getShell(); - - try { - - operation.run(progressMonitor); - - firePropertyChange(PROP_DIRTY); - - } catch (InterruptedException x) { - // NeedWork - } catch (OperationCanceledException x) { - // NeedWork - } catch (InvocationTargetException x) { - String title= Utilities.getString("CompareEditor.saveError.title"); //$NON-NLS-1$ - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(shell, title, Utilities.getFormattedString("CompareEditor.cantSaveError", reason)); //$NON-NLS-1$ - } - } - - /* - * @see IEditorPart#isDirty() - */ - public boolean isDirty() { - IEditorInput input= getEditorInput(); - if (input instanceof CompareEditorInput) - return ((CompareEditorInput)input).isSaveNeeded(); - return false; - } - - public void propertyChange(PropertyChangeEvent event) { - Object old_value= event.getOldValue(); - Object new_value= event.getNewValue(); - if (old_value == null || new_value == null || !old_value.equals(new_value)) - firePropertyChange(PROP_DIRTY); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java deleted file mode 100644 index 254d0d395..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.jface.action.*; - -import org.eclipse.ui.*; -import org.eclipse.ui.actions.ActionFactory; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.part.EditorActionBarContributor; - -import org.eclipse.compare.*; - - -public class CompareEditorContributor extends EditorActionBarContributor { - - private IEditorPart fActiveEditorPart= null; - - private IgnoreWhiteSpaceAction fIgnoreWhitespace; - private NavigationAction fNext; - private NavigationAction fPrevious; - - private NavigationAction fToolbarNext; - private NavigationAction fToolbarPrevious; - - - public CompareEditorContributor() { - ResourceBundle bundle= CompareUIPlugin.getResourceBundle(); - - fIgnoreWhitespace= new IgnoreWhiteSpaceAction(bundle, null); - WorkbenchHelp.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION); - - fNext= new NavigationAction(bundle, true); - WorkbenchHelp.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION); - - fPrevious= new NavigationAction(bundle, false); - WorkbenchHelp.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION); - - fToolbarNext= new NavigationAction(bundle, true); - WorkbenchHelp.setHelp(fToolbarNext, ICompareContextIds.NEXT_DIFF_ACTION); - - fToolbarPrevious= new NavigationAction(bundle, false); - WorkbenchHelp.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION); - } - - /* - * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager) - */ - public void contributeToToolBar(IToolBarManager tbm) { - tbm.add(new Separator()); - tbm.add(fIgnoreWhitespace); - tbm.add(fToolbarNext); - tbm.add(fToolbarPrevious); - } - - /* - * @see EditorActionBarContributor#contributeToMenu(IMenuManager) - */ - public void contributeToMenu(IMenuManager menuManager) { - } - - public void setActiveEditor(IEditorPart targetEditor) { - - if (fActiveEditorPart == targetEditor) - return; - - fActiveEditorPart= targetEditor; - - if (fActiveEditorPart != null) { - IEditorInput input= fActiveEditorPart.getEditorInput(); - if (input instanceof CompareEditorInput) { - CompareEditorInput compareInput= (CompareEditorInput) input; - fNext.setCompareEditorInput(compareInput); - fPrevious.setCompareEditorInput(compareInput); - // Begin fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105 - fToolbarNext.setCompareEditorInput(compareInput); - fToolbarPrevious.setCompareEditorInput(compareInput); - // End fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105 - } - } - - if (targetEditor instanceof CompareEditor) { - IActionBars actionBars= getActionBars(); - - CompareEditor editor= (CompareEditor) targetEditor; - editor.setActionBars(actionBars); - - actionBars.setGlobalActionHandler(ActionFactory.NEXT.getId(), fNext); - actionBars.setGlobalActionHandler(ActionFactory.PREVIOUS.getId(), fPrevious); - - CompareConfiguration cc= editor.getCompareConfiguration(); - fIgnoreWhitespace.setCompareConfiguration(cc); - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java deleted file mode 100644 index b6fb85fd5..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class CompareMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.CompareMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private CompareMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties deleted file mode 100644 index e29774d71..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareMessages.properties +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -ComparePlugin.internal_error= Internal Error -ExceptionDialog.seeErrorLogMessage= See error log for more details. - -# -# Title format for CompareViewerSwitchingPane -# -CompareViewerSwitchingPane.Titleformat= {0} ({1}) - -# -# Title message for StructureDiffViewer if no structural differences could be found -# -StructureDiffViewer.NoStructuralDifferences= No Structural Differences -StructureDiffViewer.StructureError= Can't Compare Structures - -# -# TextMergeViewer -# -TextMergeViewer.cursorPosition.format= {0} : {1} - -TextMergeViewer.beforeLine.format= before line {0} -TextMergeViewer.range.format= {0} : {1} - -TextMergeViewer.changeType.addition= addition -TextMergeViewer.changeType.deletion= deletion -TextMergeViewer.changeType.change= change - -TextMergeViewer.direction.outgoing= outgoing -TextMergeViewer.direction.incoming= incoming -TextMergeViewer.direction.conflicting= conflicting - -TextMergeViewer.diffType.format= {0} {1} - -TextMergeViewer.diffDescription.noDiff.format= no diff -TextMergeViewer.diffDescription.diff.format= {0} #{1} (Left: {2}, Right: {3}) -TextMergeViewer.statusLine.format= Left: {0}, Right: {1}, {2} - -TextMergeViewer.atEnd.title= Go to Next Difference -TextMergeViewer.atEnd.message= End of document reached. Continue at beginning? - -TextMergeViewer.atBeginning.title= Go to Previous Difference -TextMergeViewer.atBeginning.message= Beginning of document reached. Continue at end? - -CompareNavigator.atEnd.title= Go to Next Difference -CompareNavigator.atEnd.message= Last difference reached. - -CompareNavigator.atBeginning.title= Go to Previous Difference -CompareNavigator.atBeginning.message= First difference reached. diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java deleted file mode 100644 index a5f28495c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareNavigator.java +++ /dev/null @@ -1,157 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Control; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.compare.CompareEditorInput; -import org.eclipse.compare.*; - -/** - * Supports cross-pane navigation through differences. - * XXX: Design is as it is because the feature had to be added without touching API. - */ -public class CompareNavigator implements ICompareNavigator { - - private boolean fLastDirection= true; - private CompareViewerSwitchingPane[] fPanes; - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - private boolean fNextFirstTime= true; - - public CompareNavigator(CompareViewerSwitchingPane[] panes) { - fPanes= panes; - } - - public CompareViewerSwitchingPane[] getPanes() { - return fPanes; - } - - public boolean selectChange(boolean next) { - - fLastDirection= next; - - // Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - if (next && fNextFirstTime && mustOpen()) { - fNextFirstTime= false; - openElement(); - } - - // find most down stream CompareViewerPane - int n= 0; - INavigatable[] navigators= new INavigatable[4]; - for (int i= 0; i < fPanes.length; i++) { - navigators[n]= getNavigator(fPanes[i]); - if (navigators[n] != null) - n++; - } - - while (n > 0) { - n--; - if (navigators[n].gotoDifference(next)) { - // at end of this navigator - continue; - } else // not at end - return false; - } - - return true; - } - - private static INavigatable getNavigator(CompareViewerSwitchingPane pane) { - if (pane == null) - return null; - if (pane.isEmpty()) - return null; - Viewer viewer= pane.getViewer(); - if (viewer == null) - return null; - Control control= viewer.getControl(); - if (control == null) - return null; - Object data= control.getData(INavigatable.NAVIGATOR_PROPERTY); - if (data instanceof INavigatable) - return (INavigatable) data; - return null; - } - - private static CompareNavigator findNavigator(Control c) { - while (c != null && !c.isDisposed()) { // PR 1GEUVV2 - Object data= c.getData(); - if (data instanceof CompareEditorInput) { - CompareEditorInput cei= (CompareEditorInput) data; - Object adapter= cei.getAdapter(CompareNavigator.class); - if (adapter instanceof CompareNavigator) - return (CompareNavigator)adapter; - } - c= c.getParent(); - } - return null; - } - - private boolean resetDirection() { - boolean last= fLastDirection; - fLastDirection= true; - return last; - } - - public static boolean getDirection(Control c) { - CompareNavigator nav= findNavigator(c); - if (nav != null) - return nav.resetDirection(); - return true; - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private boolean mustOpen() { - if (fPanes == null || fPanes.length == 0) - return false; - for (int i= 1; i < fPanes.length; i++) { - CompareViewerSwitchingPane pane= fPanes[i]; - if (pane != null && pane.getInput() != null) - return false; - } - return true; - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private void openElement() { - if (fPanes == null || fPanes.length == 0) - return; - IOpenable openable= getOpenable(fPanes[0]); - if (openable != null) { - openable.openSelected(); - } - } - - /* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ - private static IOpenable getOpenable(CompareViewerSwitchingPane pane) { - if (pane == null) - return null; - if (pane.isEmpty()) - return null; - Viewer viewer= pane.getViewer(); - if (viewer == null) - return null; - Control control= viewer.getControl(); - if (control == null) - return null; - Object data= control.getData(IOpenable.OPENABLE_PROPERTY); - if (data instanceof IOpenable) - return (IOpenable) data; - return null; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java deleted file mode 100644 index f8ba07487..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java +++ /dev/null @@ -1,351 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; -import java.io.*; - -import org.eclipse.swt.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.*; -import org.eclipse.jface.util.*; - -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.help.WorkbenchHelp; -import org.eclipse.ui.texteditor.AbstractTextEditor; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; -import org.eclipse.compare.structuremergeviewer.*; - - -public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - class FakeInput implements ITypedElement, IStreamContentAccessorExtension2 { - static final String UTF_16= "UTF-16"; //$NON-NLS-1$ - String fContent; - - FakeInput(String name) { - fContent= loadPreviewContentFromFile(name); - } - public Image getImage() { - return null; - } - public String getName() { - return "no name"; //$NON-NLS-1$ - } - public String getType() { - return "no type"; //$NON-NLS-1$ - } - public InputStream getContents() { - return new ByteArrayInputStream(Utilities.getBytes(fContent, UTF_16)); - } - public String getCharset() { - return UTF_16; - } - } - - private static final String PREFIX= CompareUIPlugin.PLUGIN_ID + "."; //$NON-NLS-1$ - public static final String OPEN_STRUCTURE_COMPARE= PREFIX + "OpenStructureCompare"; //$NON-NLS-1$ - public static final String SYNCHRONIZE_SCROLLING= PREFIX + "SynchronizeScrolling"; //$NON-NLS-1$ - public static final String SHOW_PSEUDO_CONFLICTS= PREFIX + "ShowPseudoConflicts"; //$NON-NLS-1$ - public static final String INITIALLY_SHOW_ANCESTOR_PANE= PREFIX + "InitiallyShowAncestorPane"; //$NON-NLS-1$ - public static final String PREF_SAVE_ALL_EDITORS= PREFIX + "SaveAllEditors"; //$NON-NLS-1$ - public static final String SHOW_MORE_INFO= PREFIX + "ShowMoreInfo"; //$NON-NLS-1$ - public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$ - //public static final String USE_SPLINES= PREFIX + "UseSplines"; //$NON-NLS-1$ - public static final String USE_SINGLE_LINE= PREFIX + "UseSingleLine"; //$NON-NLS-1$ - //public static final String USE_RESOLVE_UI= PREFIX + "UseResolveUI"; //$NON-NLS-1$ - - - private TextMergeViewer fPreviewViewer; - private IPropertyChangeListener fPreferenceChangeListener; - private CompareConfiguration fCompareConfiguration; - private OverlayPreferenceStore fOverlayStore; - private Map fCheckBoxes= new HashMap(); - private SelectionListener fCheckBoxListener; - - - public final OverlayPreferenceStore.OverlayKey[] fKeys= new OverlayPreferenceStore.OverlayKey[] { - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, OPEN_STRUCTURE_COMPARE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SYNCHRONIZE_SCROLLING), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_PSEUDO_CONFLICTS), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, INITIALLY_SHOW_ANCESTOR_PANE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SHOW_MORE_INFO), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, IGNORE_WHITESPACE), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, PREF_SAVE_ALL_EDITORS), - - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT), - - //new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SPLINES), - new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_SINGLE_LINE), - //new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_RESOLVE_UI), - }; - - - public static void initDefaults(IPreferenceStore store) { - store.setDefault(OPEN_STRUCTURE_COMPARE, true); - store.setDefault(SYNCHRONIZE_SCROLLING, true); - store.setDefault(SHOW_PSEUDO_CONFLICTS, false); - store.setDefault(INITIALLY_SHOW_ANCESTOR_PANE, false); - store.setDefault(SHOW_MORE_INFO, false); - store.setDefault(IGNORE_WHITESPACE, false); - store.setDefault(PREF_SAVE_ALL_EDITORS, false); - //store.setDefault(USE_SPLINES, false); - store.setDefault(USE_SINGLE_LINE, true); - //store.setDefault(USE_RESOLVE_UI, false); - - store.setDefault(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT, true); - } - - public ComparePreferencePage() { - - //setDescription(Utilities.getString("ComparePreferencePage.description")); //$NON-NLS-1$ - - setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore()); - - fOverlayStore= new OverlayPreferenceStore(getPreferenceStore(), fKeys); - fPreferenceChangeListener= new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - String key= event.getProperty(); - if (key.equals(INITIALLY_SHOW_ANCESTOR_PANE)) { - boolean b= fOverlayStore.getBoolean(INITIALLY_SHOW_ANCESTOR_PANE); - if (fCompareConfiguration != null) { - fCompareConfiguration.setProperty(INITIALLY_SHOW_ANCESTOR_PANE, new Boolean(b)); - } - } - } - }; - fOverlayStore.addPropertyChangeListener(fPreferenceChangeListener); - } - - /* - * @see IWorkbenchPreferencePage#init() - */ - public void init(IWorkbench workbench) { - } - - /* - * @see PreferencePage#performOk() - */ - public boolean performOk() { - fOverlayStore.propagate(); - return true; - } - - /* - * @see PreferencePage#performDefaults() - */ - protected void performDefaults() { - - fOverlayStore.loadDefaults(); - initializeFields(); - - super.performDefaults(); - } - - /* - * @see DialogPage#dispose() - */ - public void dispose() { - - if (fOverlayStore != null) { - if (fPreferenceChangeListener != null) { - fOverlayStore.removePropertyChangeListener(fPreferenceChangeListener); - fPreferenceChangeListener= null; - } - fOverlayStore.stop(); - fOverlayStore= null; - } - - super.dispose(); - } - - static public boolean getSaveAllEditors() { - IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore(); - return store.getBoolean(PREF_SAVE_ALL_EDITORS); - } - - static public void setSaveAllEditors(boolean value) { - IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore(); - store.setValue(PREF_SAVE_ALL_EDITORS, value); - } - - /* - * @see PreferencePage#createContents(Composite) - */ - protected Control createContents(Composite parent) { - - WorkbenchHelp.setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE); - - fOverlayStore.load(); - fOverlayStore.start(); - - TabFolder folder= new TabFolder(parent, SWT.NONE); - folder.setLayout(new TabFolderLayout()); - folder.setLayoutData(new GridData(GridData.FILL_BOTH)); - - TabItem item= new TabItem(folder, SWT.NONE); - item.setText(Utilities.getString("ComparePreferencePage.generalTab.label")); //$NON-NLS-1$ - //item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); - item.setControl(createGeneralPage(folder)); - - item= new TabItem(folder, SWT.NONE); - item.setText(Utilities.getString("ComparePreferencePage.textCompareTab.label")); //$NON-NLS-1$ - //item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); - item.setControl(createTextComparePage(folder)); - - initializeFields(); - Dialog.applyDialogFont(folder); - return folder; - } - - private Control createGeneralPage(Composite parent) { - Composite composite= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - layout.numColumns= 1; - composite.setLayout(layout); - - addCheckBox(composite, "ComparePreferencePage.structureCompare.label", OPEN_STRUCTURE_COMPARE, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.showMoreInfo.label", SHOW_MORE_INFO, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.ignoreWhitespace.label", IGNORE_WHITESPACE, 0); //$NON-NLS-1$ - - // a spacer - new Label(composite, SWT.NONE); - - addCheckBox(composite, "ComparePreferencePage.saveBeforePatching.label", PREF_SAVE_ALL_EDITORS, 0); //$NON-NLS-1$ - - return composite; - } - - private Control createTextComparePage(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - GridLayout layout= new GridLayout(); - layout.numColumns= 1; - composite.setLayout(layout); - - addCheckBox(composite, "ComparePreferencePage.synchronizeScrolling.label", SYNCHRONIZE_SCROLLING, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.initiallyShowAncestorPane.label", INITIALLY_SHOW_ANCESTOR_PANE, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.showPseudoConflicts.label", SHOW_PSEUDO_CONFLICTS, 0); //$NON-NLS-1$ - - //addCheckBox(composite, "ComparePreferencePage.useSplines.label", USE_SPLINES, 0); //$NON-NLS-1$ - addCheckBox(composite, "ComparePreferencePage.useSingleLine.label", USE_SINGLE_LINE, 0); //$NON-NLS-1$ - //addCheckBox(composite, "ComparePreferencePage.useResolveUI.label", USE_RESOLVE_UI, 0); //$NON-NLS-1$ - - // a spacer - new Label(composite, SWT.NONE); - - Label previewLabel= new Label(composite, SWT.NULL); - previewLabel.setText(Utilities.getString("ComparePreferencePage.preview.label")); //$NON-NLS-1$ - - Control previewer= createPreviewer(composite); - GridData gd= new GridData(GridData.FILL_BOTH); - gd.widthHint= convertWidthInCharsToPixels(60); - gd.heightHint= convertHeightInCharsToPixels(13); - previewer.setLayoutData(gd); - - return composite; - } - - private Control createPreviewer(Composite parent) { - - fCompareConfiguration= new CompareConfiguration(fOverlayStore); - fCompareConfiguration.setAncestorLabel(Utilities.getString("ComparePreferencePage.ancestor.label")); //$NON-NLS-1$ - - fCompareConfiguration.setLeftLabel(Utilities.getString("ComparePreferencePage.left.label")); //$NON-NLS-1$ - fCompareConfiguration.setLeftEditable(false); - - fCompareConfiguration.setRightLabel(Utilities.getString("ComparePreferencePage.right.label")); //$NON-NLS-1$ - fCompareConfiguration.setRightEditable(false); - - fPreviewViewer= new TextMergeViewer(parent, SWT.BORDER, fCompareConfiguration); - - fPreviewViewer.setInput( - new DiffNode(Differencer.CONFLICTING, - new FakeInput("ComparePreferencePage.previewAncestor"), //$NON-NLS-1$ - new FakeInput("ComparePreferencePage.previewLeft"), //$NON-NLS-1$ - new FakeInput("ComparePreferencePage.previewRight") //$NON-NLS-1$ - ) - ); - - Control c= fPreviewViewer.getControl(); - c.addDisposeListener(new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - if (fCompareConfiguration != null) - fCompareConfiguration.dispose(); - } - }); - - return c; - } - - private void initializeFields() { - - Iterator e= fCheckBoxes.keySet().iterator(); - while (e.hasNext()) { - Button b= (Button) e.next(); - String key= (String) fCheckBoxes.get(b); - b.setSelection(fOverlayStore.getBoolean(key)); - } - } - - // overlay stuff - - private Button addCheckBox(Composite parent, String labelKey, String key, int indentation) { - - String label= Utilities.getString(labelKey); - - Button checkBox= new Button(parent, SWT.CHECK); - checkBox.setText(label); - - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.horizontalIndent= indentation; - gd.horizontalSpan= 2; - checkBox.setLayoutData(gd); - - if (fCheckBoxListener == null) { - fCheckBoxListener= new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - Button button= (Button) e.widget; - fOverlayStore.setValue((String) fCheckBoxes.get(button), button.getSelection()); - } - }; - } - checkBox.addSelectionListener(fCheckBoxListener); - - fCheckBoxes.put(checkBox, key); - - return checkBox; - } - - private String loadPreviewContentFromFile(String key) { - - String preview= Utilities.getString(key); - String separator= System.getProperty("line.separator"); //$NON-NLS-1$ - StringBuffer buffer= new StringBuffer(); - for (int i= 0; i < preview.length(); i++) { - char c= preview.charAt(i); - if (c == '\n') - buffer.append(separator); - else - buffer.append(c); - } - return buffer.toString(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java deleted file mode 100644 index ecf51182e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareUIPlugin.java +++ /dev/null @@ -1,891 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.MalformedURLException; -import java.lang.reflect.InvocationTargetException; -import java.util.*; - -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.preference.IPreferenceStore; - -import org.eclipse.core.runtime.*; -import org.eclipse.ui.model.IWorkbenchAdapter; -import org.eclipse.ui.*; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.ui.plugin.AbstractUIPlugin; - - -/** - * The Compare UI plug-in defines the entry point to initiate a configurable - * compare operation on arbitrary resources. The result of the compare - * is opened into a compare editor where the details can be browsed and - * edited in dynamically selected structure and content viewers. - * <p> - * The Compare UI provides a registry for content and structure compare viewers, - * which is initialized from extensions contributed to extension points - * declared by this plug-in. - * <p> - * This class is the plug-in runtime class for the - * <code>"org.eclipse.compare"</code> plug-in. - * </p> - */ -public final class CompareUIPlugin extends AbstractUIPlugin { - - public static final String DTOOL_NEXT= "dlcl16/next_nav.gif"; //$NON-NLS-1$ - public static final String CTOOL_NEXT= "clcl16/next_nav.gif"; //$NON-NLS-1$ - public static final String ETOOL_NEXT= "elcl16/next_nav.gif"; //$NON-NLS-1$ - - public static final String DTOOL_PREV= "dlcl16/prev_nav.gif"; //$NON-NLS-1$ - public static final String CTOOL_PREV= "clcl16/prev_nav.gif"; //$NON-NLS-1$ - public static final String ETOOL_PREV= "elcl16/prev_nav.gif"; //$NON-NLS-1$ - - /** Status code describing an internal error */ - public static final int INTERNAL_ERROR= 1; - - private static boolean NORMALIZE_CASE= true; - - private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$ - private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$ - - public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$ - - private static final String STRUCTURE_CREATOR_EXTENSION_POINT= "structureCreators"; //$NON-NLS-1$ - private static final String STRUCTURE_MERGEVIEWER_EXTENSION_POINT= "structureMergeViewers"; //$NON-NLS-1$ - private static final String CONTENT_MERGEVIEWER_EXTENSION_POINT= "contentMergeViewers"; //$NON-NLS-1$ - private static final String CONTENT_VIEWER_EXTENSION_POINT= "contentViewers"; //$NON-NLS-1$ - - private static final String COMPARE_EDITOR= PLUGIN_ID + ".CompareEditor"; //$NON-NLS-1$ - - private static final String STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME= "StructureViewerAliases"; //$NON-NLS-1$ - - /** Maps type to icons */ - private static Map fgImages= new Hashtable(10); - /** Maps type to ImageDescriptors */ - private static Map fgImageDescriptors= new Hashtable(10); - /** Maps ImageDescriptors to Images */ - private static Map fgImages2= new Hashtable(10); - - private static Map fgStructureCreators= new Hashtable(10); - private static Map fgStructureViewerDescriptors= new Hashtable(10); - private static Map fgStructureViewerAliases= new Hashtable(10); - private static Map fgContentViewerDescriptors= new Hashtable(10); - private static Map fgContentMergeViewerDescriptors= new Hashtable(10); - - private static List fgDisposeOnShutdownImages= new ArrayList(); - - private static ResourceBundle fgResourceBundle; - - private static CompareUIPlugin fgComparePlugin; - - /** - * Creates the <code>CompareUIPlugin</code> object and registers all - * structure creators, content merge viewers, and structure merge viewers - * contributed to this plug-in's extension points. - * <p> - * Note that instances of plug-in runtime classes are automatically created - * by the platform in the course of plug-in activation. - * </p> - * - * @param descriptor the plug-in descriptor - */ - public CompareUIPlugin(IPluginDescriptor descriptor) { - super(descriptor); - - fgComparePlugin= this; - - fgResourceBundle= descriptor.getResourceBundle(); - - registerExtensions(); - - initPreferenceStore(); - } - - /** - * @see AbstractUIPlugin#initializeDefaultPreferences - */ - protected void initializeDefaultPreferences(IPreferenceStore store) { - super.initializeDefaultPreferences(store); - - ComparePreferencePage.initDefaults(store); - } - - /** - * Registers all structure creators, content merge viewers, and structure merge viewers - * that are found in the XML plugin files. - */ - private void registerExtensions() { - IPluginRegistry registry= Platform.getPluginRegistry(); - - // collect all IStructureCreators - IConfigurationElement[] elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_CREATOR_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - final IConfigurationElement conf= elements[i]; - String extensions= conf.getAttribute(EXTENSIONS_ATTRIBUTE); - registerStructureCreator(extensions, - new IStructureCreatorDescriptor() { - public IStructureCreator createStructureCreator() { - try { - return (IStructureCreator) conf.createExecutableExtension(CLASS_ATTRIBUTE); - } catch (CoreException ex) { - // NeedWork - } - return null; - } - } - ); - } - - // collect all viewers which define the structure mergeviewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, STRUCTURE_MERGEVIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerStructureViewerDescriptor(desc.getExtension(), desc); - } - - // collect all viewers which define the content mergeviewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_MERGEVIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerContentMergeViewerDescriptor(desc.getExtension(), desc); - } - - // collect all viewers which define the content viewer extension point - elements= registry.getConfigurationElementsFor(PLUGIN_ID, CONTENT_VIEWER_EXTENSION_POINT); - for (int i= 0; i < elements.length; i++) { - ViewerDescriptor desc= new ViewerDescriptor(elements[i]); - String ext= desc.getExtension(); - if (ext != null) - registerContentViewerDescriptor(desc.getExtension(), desc); - } - } - - /** - * Returns the singleton instance of this plug-in runtime class. - * - * @return the compare plug-in instance - */ - public static CompareUIPlugin getDefault() { - return fgComparePlugin; - } - - /** - * Returns this plug-in's resource bundle. - * - * @return the plugin's resource bundle - */ - public static ResourceBundle getResourceBundle() { - return fgResourceBundle; - } - - public static IWorkbench getActiveWorkbench() { - CompareUIPlugin plugin= getDefault(); - if (plugin == null) - return null; - return plugin.getWorkbench(); - } - - public static IWorkbenchWindow getActiveWorkbenchWindow() { - IWorkbench workbench= getActiveWorkbench(); - if (workbench == null) - return null; - return workbench.getActiveWorkbenchWindow(); - } - - /** - * Returns the active workkbench page or <code>null</code> if - * no active workkbench page can be determined. - * - * @return the active workkbench page or <code>null</code> if - * no active workkbench page can be determined - */ - private static IWorkbenchPage getActivePage() { - IWorkbenchWindow window= getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getActivePage(); - } - - /** - * Returns the SWT Shell of the active workbench window or <code>null</code> if - * no workbench window is active. - * - * @return the SWT Shell of the active workbench window, or <code>null</code> if - * no workbench window is active - */ - public static Shell getShell() { - IWorkbenchWindow window= getActiveWorkbenchWindow(); - if (window == null) - return null; - return window.getShell(); - } - - /** - * Registers the given image for being disposed when this plug-in is shutdown. - * - * @param image the image to register for disposal - */ - public static void disposeOnShutdown(Image image) { - if (image != null) - fgDisposeOnShutdownImages.add(image); - } - - /* (non-Javadoc) - * Method declared on Plugin. - * Frees all resources of the compare plug-in. - */ - public void shutdown() throws CoreException { - - /* - * Converts the aliases into a single string before they are stored - * in the preference store. - * The format is: - * <key> '.' <alias> ' ' <key> '.' <alias> ... - */ - IPreferenceStore ps= getPreferenceStore(); - if (ps != null) { - StringBuffer sb= new StringBuffer(); - Iterator iter= fgStructureViewerAliases.keySet().iterator(); - while (iter.hasNext()) { - String key= (String) iter.next(); - String alias= (String) fgStructureViewerAliases.get(key); - sb.append(key); - sb.append('.'); - sb.append(alias); - sb.append(' '); - } - ps.setValue(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME, sb.toString()); - } - - super.shutdown(); - - if (fgDisposeOnShutdownImages != null) { - Iterator i= fgDisposeOnShutdownImages.iterator(); - while (i.hasNext()) { - Image img= (Image) i.next(); - if (!img.isDisposed()) - img.dispose(); - } - fgImages= null; - } - } - - /** - * Performs the comparison described by the given input and opens a - * compare editor on the result. - * - * @param input the input on which to open the compare editor - * @param page the workbench page on which to create a new compare editor - * @param editor if not null the input is opened in this editor - * @see CompareEditorInput - */ - public void openCompareEditor(CompareEditorInput input, IWorkbenchPage page, IReusableEditor editor) { - - if (compareResultOK(input)) { - - if (editor != null) { // reuse the given editor - editor.setInput(input); - return; - } - - if (page == null) - page= getActivePage(); - if (page != null) { - // open new CompareEditor on page - try { - page.openEditor(input, COMPARE_EDITOR); - } catch (PartInitException e) { - MessageDialog.openError(getShell(), Utilities.getString("CompareUIPlugin.openEditorError"), e.getMessage()); //$NON-NLS-1$ - } - } else { - MessageDialog.openError(getShell(), - Utilities.getString("CompareUIPlugin.openEditorError"), //$NON-NLS-1$ - Utilities.getString("CompareUIPlugin.noActiveWorkbenchPage")); //$NON-NLS-1$ - } - } - } - - /** - * Performs the comparison described by the given input and opens a - * compare dialog on the result. - * - * @param input the input on which to open the compare editor - * @see CompareEditorInput - */ - public void openCompareDialog(final CompareEditorInput input) { - - if (compareResultOK(input)) { - CompareDialog dialog= new CompareDialog(getShell(), input); - dialog.open(); - } - } - - /** - * @return <code>true</code> if compare result is OK to show, <code>false</code> otherwise - */ - private boolean compareResultOK(CompareEditorInput input) { - final Shell shell= getShell(); - try { - - // run operation in separate thread and make it canceable - new ProgressMonitorDialog(shell).run(true, true, input); - - String message= input.getMessage(); - if (message != null) { - MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), message); //$NON-NLS-1$ - return false; - } - - if (input.getCompareResult() == null) { - MessageDialog.openInformation(shell, Utilities.getString("CompareUIPlugin.dialogTitle"), Utilities.getString("CompareUIPlugin.noDifferences")); //$NON-NLS-2$ //$NON-NLS-1$ - return false; - } - - return true; - - } catch (InterruptedException x) { - // cancelled by user - } catch (InvocationTargetException x) { - MessageDialog.openError(shell, Utilities.getString("CompareUIPlugin.compareFailed"), x.getTargetException().getMessage()); //$NON-NLS-1$ - } - return false; - } - - /** - * Registers an image for the given type. - */ - private static void registerImage(String type, Image image, boolean dispose) { - fgImages.put(normalizeCase(type), image); - if (image != null && dispose) { - fgDisposeOnShutdownImages.add(image); - } - } - - /** - * Registers an image descriptor for the given type. - * - * @param type the type - * @param descriptor the image descriptor - */ - public static void registerImageDescriptor(String type, ImageDescriptor descriptor) { - fgImageDescriptors.put(normalizeCase(type), descriptor); - } - - public static ImageDescriptor getImageDescriptor(String relativePath) { - - URL installURL= null; - if (fgComparePlugin != null) - installURL= fgComparePlugin.getDescriptor().getInstallURL(); - - if (installURL != null) { - try { - URL url= new URL(installURL, Utilities.getIconPath(null) + relativePath); - return ImageDescriptor.createFromURL(url); - } catch (MalformedURLException e) { - Assert.isTrue(false); - } - } - return null; - } - - /** - * Returns a shared image for the given type, or a generic image if none - * has been registered for the given type. - * <p> - * Note: Images returned from this method will be automitically disposed - * of when this plug-in shuts down. Callers must not dispose of these - * images themselves. - * </p> - * - * @param type the type - * @return the image - */ - public static Image getImage(String type) { - - type= normalizeCase(type); - - boolean dispose= false; - Image image= null; - if (type != null) - image= (Image) fgImages.get(type); - if (image == null) { - ImageDescriptor id= (ImageDescriptor) fgImageDescriptors.get(type); - if (id != null) { - image= id.createImage(); - dispose= true; - } - - if (image == null) { - if (fgComparePlugin != null) { - if (ITypedElement.FOLDER_TYPE.equals(type)) { - image= getDefault().getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER); - //image= SharedImages.getImage(ISharedImages.IMG_OBJ_FOLDER); - } else { - image= createWorkbenchImage(type); - dispose= true; - } - } else { - id= (ImageDescriptor) fgImageDescriptors.get(normalizeCase("file")); //$NON-NLS-1$ - image= id.createImage(); - dispose= true; - } - } - if (image != null) - registerImage(type, image, dispose); - } - return image; - } - - /** - * Returns a shared image for the given adaptable. - * This convenience method queries the given adaptable - * for its <code>IWorkbenchAdapter.getImageDescriptor</code>, which it - * uses to create an image if it does not already have one. - * <p> - * Note: Images returned from this method will be automitically disposed - * of when this plug-in shuts down. Callers must not dispose of these - * images themselves. - * </p> - * - * @param adaptable the adaptable for which to find an image - * @return an image - */ - public static Image getImage(IAdaptable adaptable) { - if (adaptable != null) { - Object o= adaptable.getAdapter(IWorkbenchAdapter.class); - if (o instanceof IWorkbenchAdapter) { - ImageDescriptor id= ((IWorkbenchAdapter) o).getImageDescriptor(adaptable); - if (id != null) { - Image image= (Image)fgImages2.get(id); - if (image == null) { - image= id.createImage(); - try { - fgImages2.put(id, image); - } catch (NullPointerException ex) { - // NeedWork - } - fgDisposeOnShutdownImages.add(image); - - } - return image; - } - } - } - return null; - } - - private static Image createWorkbenchImage(String type) { - IEditorRegistry er= getDefault().getWorkbench().getEditorRegistry(); - ImageDescriptor id= er.getImageDescriptor("foo." + type); //$NON-NLS-1$ - return id.createImage(); - } - - /** - * Registers the given structure creator descriptor for one or more types. - * - * @param types one or more types separated by commas and whitespace - * @param descriptor the descriptor to register - */ - public static void registerStructureCreator(String types, IStructureCreatorDescriptor descriptor) { - if (types != null) { - StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$ - while (tokenizer.hasMoreElements()) { - String extension= tokenizer.nextToken().trim(); - fgStructureCreators.put(normalizeCase(extension), descriptor); - } - } - } - - /** - * Returns an structure creator descriptor for the given type. - * - * @param type the type for which to find a descriptor - * @return a descriptor for the given type, or <code>null</code> if no - * descriptor has been registered - */ - public static IStructureCreatorDescriptor getStructureCreator(String type) { - return (IStructureCreatorDescriptor) fgStructureCreators.get(normalizeCase(type)); - } - - /** - * Registers the given structure viewer descriptor for one or more types. - * - * @param types one or more types separated by commas and whitespace - * @param the descriptor to register - */ - public static void registerStructureViewerDescriptor(String types, IViewerDescriptor descriptor) { - StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$ - while (tokenizer.hasMoreElements()) { - String extension= tokenizer.nextToken().trim(); - fgStructureViewerDescriptors.put(normalizeCase(extension), descriptor); - } - } - - /** - * Registers the given content merge viewer descriptor for one or more types. - * - * @param types one or more types separated by commas and whitespace - * @param descriptor the descriptor to register - */ - public static void registerContentMergeViewerDescriptor(String types, IViewerDescriptor descriptor) { - StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$ - while (tokenizer.hasMoreElements()) { - String extension= tokenizer.nextToken().trim(); - fgContentMergeViewerDescriptors.put(normalizeCase(extension), descriptor); - } - } - - /** - * Registers the given content viewer descriptor for one or more types. - * - * @param types one or more types separated by commas and whitespace - * @param descriptor the descriptor to register - */ - public static void registerContentViewerDescriptor(String types, IViewerDescriptor descriptor) { - StringTokenizer tokenizer= new StringTokenizer(types, ","); //$NON-NLS-1$ - while (tokenizer.hasMoreElements()) { - String extension= tokenizer.nextToken().trim(); - fgContentViewerDescriptors.put(normalizeCase(extension), descriptor); - } - } - - /** - * Returns a structure compare viewer based on an old viewer and an input object. - * If the old viewer is suitable for showing the input, the old viewer - * is returned. Otherwise, the input's type is used to find a viewer descriptor in the registry - * which in turn is used to create a structure compare viewer under the given parent composite. - * If no viewer descriptor can be found <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a structure viewer - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent, - CompareConfiguration configuration) { - - if (input.getLeft() == null || input.getRight() == null) // we don't show the structure of additions or deletions - return null; - - String[] types= getTypes(input); - if (!isHomogenous(types)) - return null; - String type= types[0]; - - type= normalizeCase(type); - - IViewerDescriptor vd= (IViewerDescriptor) fgStructureViewerDescriptors.get(type); - if (vd == null) { - String alias= (String) fgStructureViewerAliases.get(type); - if (alias != null) - vd= (IViewerDescriptor) fgStructureViewerDescriptors.get(alias); - } - if (vd != null) - return vd.createViewer(oldViewer, parent, configuration); - - IStructureCreatorDescriptor scc= getStructureCreator(type); - if (scc != null) { - IStructureCreator sc= scc.createStructureCreator(); - if (sc != null) { - StructureDiffViewer sdv= new StructureDiffViewer(parent, configuration); - sdv.setStructureCreator(sc); - return sdv; - } - } - return null; - } - - /** - * Returns a content compare viewer based on an old viewer and an input object. - * If the old viewer is suitable for showing the input the old viewer - * is returned. Otherwise the input's type is used to find a viewer descriptor in the registry - * which in turn is used to create a content compare viewer under the given parent composite. - * If no viewer descriptor can be found <code>null</code> is returned. - * - * @param oldViewer a new viewer is only created if this old viewer cannot show the given input - * @param input the input object for which to find a content viewer - * @param parent the SWT parent composite under which the new viewer is created - * @param configuration a configuration which is passed to a newly created viewer - * @return the compare viewer which is suitable for the given input object or <code>null</code> - */ - public static Viewer findContentViewer(Viewer oldViewer, Object in, Composite parent, CompareConfiguration cc) { - - if (in instanceof IStreamContentAccessor) { - String type= ITypedElement.TEXT_TYPE; - - if (in instanceof ITypedElement) { - ITypedElement tin= (ITypedElement) in; - String ty= tin.getType(); - if (ty != null) - type= ty; - } - type= normalizeCase(type); - - IViewerDescriptor vd= (IViewerDescriptor) fgContentViewerDescriptors.get(type); - Viewer viewer= null; - if (vd != null) { - viewer= vd.createViewer(oldViewer, parent, cc); - if (viewer != null) - return viewer; - } - // fallback - return new SimpleTextViewer(parent); - } - - if (!(in instanceof ICompareInput)) - return null; - - ICompareInput input= (ICompareInput) in; - String[] types= getTypes(input); - String type= null; - if (isHomogenous(types)) - type= types[0]; - - if (ITypedElement.FOLDER_TYPE.equals(type)) - return null; - - if (type == null) { - int n= 0; - for (int i= 0; i < types.length; i++) - if (!ITypedElement.UNKNOWN_TYPE.equals(types[i])) { - n++; - if (type == null) - type= types[i]; // remember the first known type - } - if (n > 1) // don't use the type if there were more than one - type= null; - } - - if (type != null) { - IViewerDescriptor vd= (IViewerDescriptor) fgContentMergeViewerDescriptors.get(type); - Viewer viewer= null; - if (vd != null) { - viewer= vd.createViewer(oldViewer, parent, cc); - if (viewer != null) - return viewer; - } - } - - // fallback - String leftType= guessType(input.getLeft()); - String rightType= guessType(input.getRight()); - - if (leftType != null || rightType != null) { - boolean right_text= rightType != null && ITypedElement.TEXT_TYPE.equals(rightType); - boolean left_text= leftType != null && ITypedElement.TEXT_TYPE.equals(leftType); - if ((leftType == null && right_text) || (left_text && rightType == null) || (left_text && right_text)) - type= ITypedElement.TEXT_TYPE; - else - type= "binary"; //$NON-NLS-1$ - - IViewerDescriptor vd= (IViewerDescriptor) fgContentMergeViewerDescriptors.get(normalizeCase(type)); - if (vd != null) - return vd.createViewer(oldViewer, parent, cc); - } - return null; - } - - private static String[] getTypes(ICompareInput input) { - ITypedElement ancestor= input.getAncestor(); - ITypedElement left= input.getLeft(); - ITypedElement right= input.getRight(); - - String[] types= new String[3]; - int cnt= 0; - - if (ancestor != null) { - String type= ancestor.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - if (left != null) { - String type= left.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - if (right != null) { - String type= right.getType(); - if (type != null) - types[cnt++]= normalizeCase(type); - } - - String[] result= new String[cnt]; - for (int i= 0; i < cnt; i++) - result[i]= types[i]; - return result; - } - - /** - * Determines the type of the given threeway input by analyzing - * the types (file extension) of the individual parts. - * Returns null if no type can be determined. - */ - private static boolean isHomogenous(String[] types) { - switch (types.length) { - case 1: - return true; - case 2: - return types[0].equals(types[1]); - case 3: - return types[0].equals(types[1]) && types[1].equals(types[2]); - } - return false; - } - - /** - * Guesses the file type of the given input. - * Returns ITypedElement.TEXT_TYPE if none of the first 10 lines is longer than 1000 bytes. - * Returns ITypedElement.UNKNOWN_TYPE otherwise. - * Returns <code>null</code> if the input isn't an <code>IStreamContentAccessor</code>. - */ - private static String guessType(ITypedElement input) { - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - InputStream is= null; - try { - is= sca.getContents(); - if (is == null) - return null; - int lineLength= 0; - int lines= 0; - while (lines < 10) { - int c= is.read(); - if (c == -1) // EOF - break; - if (c == '\n' || c == '\r') { // reset line length - lineLength= 0; - lines++; - } else - lineLength++; - if (lineLength > 1000) - return ITypedElement.UNKNOWN_TYPE; - } - return ITypedElement.TEXT_TYPE; - } catch (CoreException ex) { - // be silent and return UNKNOWN_TYPE - } catch (IOException ex) { - // be silent and return UNKNOWN_TYPE - } finally { - if (is != null) { - try { - is.close(); - } catch (IOException ex) { - // silently ignored - } - } - } - return ITypedElement.UNKNOWN_TYPE; - } - return null; - } - - private static String normalizeCase(String s) { - if (NORMALIZE_CASE && s != null) - return s.toUpperCase(); - return s; - } - - //---- alias mgmt - - private void initPreferenceStore() { - //System.out.println("initPreferenceStore"); - IPreferenceStore ps= getPreferenceStore(); - if (ps != null) { - String aliases= ps.getString(STRUCTUREVIEWER_ALIASES_PREFERENCE_NAME); - //System.out.println(" <" + aliases + ">"); - if (aliases != null && aliases.length() > 0) { - StringTokenizer st= new StringTokenizer(aliases, " "); //$NON-NLS-1$ - while (st.hasMoreTokens()) { - String pair= st.nextToken(); - int pos= pair.indexOf('.'); - if (pos > 0) { - String key= pair.substring(0, pos); - String alias= pair.substring(pos+1); - fgStructureViewerAliases.put(key, alias); - //System.out.println("<" + key + "><" + alias + ">"); - } - } - } - } - } - - public static void addStructureViewerAlias(String type, String alias) { - //System.out.println("addStructureViewerAlias: " + type + " " + alias); - fgStructureViewerAliases.put(normalizeCase(alias), normalizeCase(type)); - } - - public static void removeAllStructureViewerAliases(String type) { - String t= normalizeCase(type); - Set entrySet= fgStructureViewerAliases.entrySet(); - for (Iterator iter= entrySet.iterator(); iter.hasNext(); ) { - Map.Entry entry= (Map.Entry)iter.next(); - if (entry.getValue().equals(t)) - iter.remove(); - } - } - - /** - * Returns an array of all editors that have an unsaved content. If the identical content is - * presented in more than one editor, only one of those editor parts is part of the result. - * - * @return an array of all dirty editor parts. - */ - public static IEditorPart[] getDirtyEditors() { - Set inputs= new HashSet(); - List result= new ArrayList(0); - IWorkbench workbench= getDefault().getWorkbench(); - IWorkbenchWindow[] windows= workbench.getWorkbenchWindows(); - for (int i= 0; i < windows.length; i++) { - IWorkbenchPage[] pages= windows[i].getPages(); - for (int x= 0; x < pages.length; x++) { - IEditorPart[] editors= pages[x].getDirtyEditors(); - for (int z= 0; z < editors.length; z++) { - IEditorPart ep= editors[z]; - IEditorInput input= ep.getEditorInput(); - if (!inputs.contains(input)) { - inputs.add(input); - result.add(ep); - } - } - } - } - return (IEditorPart[])result.toArray(new IEditorPart[result.size()]); - } - - public static void log(Throwable e) { - log(new Status(IStatus.ERROR, getPluginId(), INTERNAL_ERROR, CompareMessages.getString("ComparePlugin.internal_error"), e)); //$NON-NLS-1$ - } - - public static void log(IStatus status) { - getDefault().getLog().log(status); - } - - public static String getPluginId() { - return getDefault().getDescriptor().getUniqueIdentifier(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java deleted file mode 100644 index f8cef54d1..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -public class CompareWithEditionAction extends EditionAction { - - public CompareWithEditionAction() { - super(false, "org.eclipse.compare.internal.CompareWithEditionAction"); //$NON-NLS-1$ - this.fHelpContextId= ICompareContextIds.COMPARE_WITH_EDITION_DIALOG; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties deleted file mode 100644 index 154531afa..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.properties +++ /dev/null @@ -1,38 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)CompareWithEditionAction.properties -# -# Resources for CompareWithEditionAction.java - -title= Compare with Local History - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= Editor Buffer -workspaceTargetLabel= Workspace File - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -closeButton.label=Close - -noLocalHistoryError= No local history available for selected resource. diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java deleted file mode 100644 index 1c17ded85..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImage.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.graphics.*; - -import org.eclipse.jface.resource.CompositeImageDescriptor; -import org.eclipse.jface.resource.ImageDescriptor; - -/** - * Combines an image with an overlay. - */ -public class DiffImage extends CompositeImageDescriptor { - - static final int HEIGHT= 16; - - private Image fBaseImage; - private ImageDescriptor fOverlayImage; - private int fWidth; - private boolean fLeft= true; - - public DiffImage(Image base, ImageDescriptor overlay, int w) { - fBaseImage= base; - fOverlayImage= overlay; - fWidth= w; - } - - public DiffImage(Image base, ImageDescriptor overlay, int w, boolean onLeft) { - fBaseImage= base; - fOverlayImage= overlay; - fWidth= w; - fLeft= onLeft; - } - - protected Point getSize() { - return new Point(fWidth, HEIGHT); - } - - protected void drawCompositeImage(int width, int height) { - if (fLeft) { - if (fBaseImage != null) { - ImageData base= fBaseImage.getImageData(); - if (base == null) - base= DEFAULT_IMAGE_DATA; - drawImage(base, fWidth - base.width, 0); - } - - if (fOverlayImage != null) { - ImageData overlay= fOverlayImage.getImageData(); - if (overlay == null) - overlay= DEFAULT_IMAGE_DATA; - drawImage(overlay, 0, (HEIGHT - overlay.height) / 2); - } - } else { - if (fBaseImage != null) { - ImageData base= fBaseImage.getImageData(); - if (base == null) - base= DEFAULT_IMAGE_DATA; - drawImage(base, 0, 0); - } - - if (fOverlayImage != null) { - ImageData overlay= fOverlayImage.getImageData(); - if (overlay == null) - overlay= DEFAULT_IMAGE_DATA; - drawImage(overlay, fWidth - overlay.width, (HEIGHT - overlay.height) / 2); - } - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java deleted file mode 100644 index 20dc15a3b..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java +++ /dev/null @@ -1,197 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.text.*; -import org.eclipse.compare.contentmergeviewer.ITokenComparator; -import org.eclipse.compare.rangedifferencer.IRangeComparator; - -/** - * Implements the <code>IRangeComparator</code> interface for lines in a document. - * A <code>DocLineComparator</code> is used as the input for the <code>RangeDifferencer</code> - * engine to perform a line oriented compare on documents. - * <p> - * A <code>DocLineComparator</code> doesn't know anything about line separators because - * its notion of lines is solely defined in the underlying <code>IDocument</code>. - */ -public class DocLineComparator implements ITokenComparator { - - private IDocument fDocument; - private int fLineOffset; - private int fLineCount; - private int fLength; - private boolean fIgnoreWhiteSpace; - - /** - * Creates a <code>DocLineComparator</code> for the given document range. - * ignoreWhiteSpace controls whether comparing lines (in method - * <code>rangesEqual<code>) should ignore whitespace. - * - * @param document the document from which the lines are taken - * @param region if non-<code>null</code> only lines within this range are taken - * @param ignoreWhiteSpace if <code>true</code> white space is ignored when comparing lines - */ - public DocLineComparator(IDocument document, IRegion region, boolean ignoreWhiteSpace) { - - fDocument= document; - fIgnoreWhiteSpace= ignoreWhiteSpace; - - fLineOffset= 0; - if (region != null) { - fLength= region.getLength(); - int start= region.getOffset(); - try { - fLineOffset= fDocument.getLineOfOffset(start); - } catch (BadLocationException ex) { - // silently ignored - } - - if (fLength == 0) - fLineCount= 0; - else { - int endLine= fDocument.getNumberOfLines(); - try { - endLine= fDocument.getLineOfOffset(start + fLength); - } catch (BadLocationException ex) { - // silently ignored - } - fLineCount= endLine - fLineOffset + 1; - } - - } else { - fLength= document.getLength(); - fLineCount= fDocument.getNumberOfLines(); - } - } - - /** - * Returns the number of lines in the document. - * - * @return number of lines - */ - public int getRangeCount() { - return fLineCount; - } - - /* (non Javadoc) - * see ITokenComparator.getTokenStart - */ - public int getTokenStart(int line) { - try { - IRegion r= fDocument.getLineInformation(fLineOffset + line); - return r.getOffset(); - } catch (BadLocationException ex) { - return fDocument.getLength(); - } - } - - /* (non Javadoc) - * Returns the length of the given line. - * see ITokenComparator.getTokenLength - */ - public int getTokenLength(int line) { - return getTokenStart(line+1) - getTokenStart(line); - } - - /** - * Returns <code>true</code> if a line given by the first index - * matches a line specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the number of the line within this range comparator - * @param other the range comparator to compare this with - * @param otherIndex the number of the line within the other comparator - * @return <code>true</code> if the lines are equal - */ - public boolean rangesEqual(int thisIndex, IRangeComparator other0, int otherIndex) { - - if (other0 != null && other0.getClass() == getClass()) { - DocLineComparator other= (DocLineComparator) other0; - - if (fIgnoreWhiteSpace) { - String s1= extract(thisIndex); - String s2= other.extract(otherIndex); - return compare(s1, s2); - } - - int tlen= getTokenLength(thisIndex); - int olen= other.getTokenLength(otherIndex); - if (tlen == olen) { - String s1= extract(thisIndex); - String s2= other.extract(otherIndex); - return s1.equals(s2); - } - } - return false; - } - - /** - * Aborts the comparison if the number of tokens is too large. - * - * @return <code>true</code> to abort a token comparison - */ - public boolean skipRangeComparison(int length, int max, IRangeComparator other) { - return false; - } - - //---- private methods - - /** - * Extract a single line from the underlying document without the line separator. - * - * @param line the number of the line to extract - * @return the contents of the line as a String - */ - private String extract(int line) { - if (line < fLineCount) { - try { - IRegion r= fDocument.getLineInformation(fLineOffset + line); - return fDocument.get(r.getOffset(), r.getLength()); - } catch(BadLocationException e) { - // silently ignored - } - } - return ""; //$NON-NLS-1$ - } - - private boolean compare(String s1, String s2) { - int l1= s1.length(); - int l2= s2.length(); - int c1= 0, c2= 0; - int i1= 0, i2= 0; - - while (c1 != -1) { - - c1= -1; - while (i1 < l1) { - char c= s1.charAt(i1++); - if (! Character.isWhitespace(c)) { - c1= c; - break; - } - } - - c2= -1; - while (i2 < l2) { - char c= s2.charAt(i2++); - if (! Character.isWhitespace(c)) { - c2= c; - break; - } - } - - if (c1 != c2) - return false; - } - return true; - } - -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java deleted file mode 100644 index b2db19190..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; - -import org.eclipse.jface.text.IDocument; - -/** - * No API yet. - */ -public class DocumentManager { - - private static final boolean DEBUG= false; - - private static ArrayList fgKeys= new ArrayList(); - private static ArrayList fgValues= new ArrayList(); - - public static IDocument get(Object o) { - - for (int i= 0; i < fgKeys.size(); i++) { - if (fgKeys.get(i) == o) - return (IDocument) fgValues.get(i); - } - return null; - } - - public static void put(Object o, IDocument document) { - if (DEBUG) System.out.println("DocumentManager.put: " + document); //$NON-NLS-1$ - for (int i= 0; i < fgKeys.size(); i++) { - if (fgKeys.get(i) == o) { - fgValues.set(i, document); - return; - } - } - fgKeys.add(o); - fgValues.add(document); - } - - public static void remove(IDocument document) { - if (document != null) { - if (DEBUG) System.out.println("DocumentManager.remove: " + document); //$NON-NLS-1$ - for (int i= 0; i < fgValues.size(); i++) { - if (fgValues.get(i) == document) { - fgKeys.remove(i); - fgValues.remove(i); - return; - } - } - if (DEBUG) System.out.println("DocumentManager.remove: not found"); //$NON-NLS-1$ - } - } - - public static void dump() { - if (DEBUG) System.out.println("DocumentManager: managed docs:" + fgValues.size()); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java deleted file mode 100644 index 80bde7777..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java +++ /dev/null @@ -1,237 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.ResourceBundle; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.BadLocationException; - -import org.eclipse.ui.*; -import org.eclipse.ui.part.FileEditorInput; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.ui.texteditor.IDocumentProvider; -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -import org.eclipse.compare.*; -import org.eclipse.compare.ITypedElement; -import org.eclipse.compare.IStreamContentAccessor; - - -public class EditionAction extends BaseCompareAction { - - /** - * Implements the IStreamContentAccessor and ITypedElement protocols - * for a Document. - */ - class DocumentBufferNode implements ITypedElement, IStreamContentAccessorExtension2 { - private static final String UTF_16= "UTF-16"; //$NON-NLS-1$ - private IDocument fDocument; - private IFile fFile; - - DocumentBufferNode(IDocument document, IFile file) { - fDocument= document; - fFile= file; - } - - public String getName() { - return fFile.getName(); - } - - public String getType() { - return fFile.getFileExtension(); - } - - public Image getImage() { - return null; - } - - public InputStream getContents() { - return new ByteArrayInputStream(Utilities.getBytes(fDocument.get(), UTF_16)); - } - - public String getCharset() { - return UTF_16; - } - } - - private String fBundleName; - private boolean fReplaceMode; - protected boolean fPrevious= false; - protected String fHelpContextId; - - EditionAction(boolean replaceMode, String bundleName) { - fReplaceMode= replaceMode; - fBundleName= bundleName; - } - - protected boolean isEnabled(ISelection selection) { - return Utilities.getFiles(selection).length == 1; // we don't support multiple selection for now - } - - protected void run(ISelection selection) { - IFile[] files= Utilities.getFiles(selection); - for (int i= 0; i < files.length; i++) - doFromHistory(files[i]); - } - - private void doFromHistory(final IFile file) { - - ResourceBundle bundle= ResourceBundle.getBundle(fBundleName); - String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$ - - Shell parentShell= CompareUIPlugin.getShell(); - - IFileState states[]= null; - try { - states= file.getHistory(null); - } catch (CoreException ex) { - MessageDialog.openError(parentShell, title, ex.getMessage()); - return; - } - - if (states == null || states.length <= 0) { - String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$ - MessageDialog.openInformation(parentShell, title, msg); - return; - } - - ITypedElement base= new ResourceNode(file); - - IDocument document= getDocument(file); - ITypedElement target= base; - if (document != null) - target= new DocumentBufferNode(document, file); - - ITypedElement[] editions= new ITypedElement[states.length+1]; - editions[0]= base; - for (int i= 0; i < states.length; i++) - editions[i+1]= new HistoryItem(base, states[i]); - - EditionSelectionDialog d= new EditionSelectionDialog(parentShell, bundle); - d.setEditionTitleArgument(file.getName()); - d.setEditionTitleImage(CompareUIPlugin.getImage(file)); - //d.setHideIdenticalEntries(false); - if (fHelpContextId != null) - d.setHelpContextId(fHelpContextId); - - if (fReplaceMode) { - - ITypedElement ti= null; - if (fPrevious) - ti= d.selectPreviousEdition(target, editions, null); - else - ti= d.selectEdition(target, editions, null); - - if (ti instanceof IStreamContentAccessor) { - IStreamContentAccessor sa= (IStreamContentAccessor)ti; - - if (Utilities.validateResource(file, parentShell, title)) { - try { - - if (document != null) - updateDocument(document, sa); - else - updateWorkspace(bundle, parentShell, sa, file); - - } catch (InterruptedException x) { - // Do nothing. Operation has been canceled by user. - - } catch (InvocationTargetException x) { - String reason= x.getTargetException().getMessage(); - MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason)); //$NON-NLS-1$ - } - } - } - } else { - d.setCompareMode(true); - - d.selectEdition(target, editions, null); - } - } - - private void updateWorkspace(final ResourceBundle bundle, Shell shell, - final IStreamContentAccessor sa, final IFile file) - throws InvocationTargetException, InterruptedException { - WorkspaceModifyOperation operation= new WorkspaceModifyOperation() { - public void execute(IProgressMonitor pm) throws InvocationTargetException { - try { - String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$ - pm.beginTask(taskName, IProgressMonitor.UNKNOWN); - file.setContents(sa.getContents(), false, true, pm); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } finally { - pm.done(); - } - } - }; - - ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell); - pmdialog.run(false, true, operation); - } - - private void updateDocument(IDocument document, IStreamContentAccessor sa) throws InvocationTargetException { - try { - String text= Utilities.readString(sa); - document.replace(0, document.getLength(), text); - } catch (CoreException e) { - throw new InvocationTargetException(e); - } catch (BadLocationException e) { - throw new InvocationTargetException(e); - } - } - - private IDocument getDocument(IFile file) { - IWorkbench wb= PlatformUI.getWorkbench(); - if (wb == null) - return null; - IWorkbenchWindow[] ws= wb.getWorkbenchWindows(); - if (ws == null) - return null; - - FileEditorInput test= new FileEditorInput(file); - - for (int i= 0; i < ws.length; i++) { - IWorkbenchWindow w= ws[i]; - IWorkbenchPage[] wps= w.getPages(); - if (wps != null) { - for (int j= 0; j < wps.length; j++) { - IWorkbenchPage wp= wps[j]; - IEditorPart ep= wp.findEditor(test); - if (ep instanceof ITextEditor) { - ITextEditor te= (ITextEditor) ep; - IDocumentProvider dp= te.getDocumentProvider(); - if (dp != null) { - IDocument doc= dp.getDocument(ep); - if (doc != null) - return doc; - } - } - } - } - } - return null; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java deleted file mode 100644 index 3ea3ba5f8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; - -import org.eclipse.jface.dialogs.ErrorDialog; -import org.eclipse.jface.dialogs.MessageDialog; - -/** - * The default exception handler shows an error dialog when one of its handle methods - * is called. If the passed exception is a <code>CoreException</code> an error dialog - * pops up showing the exception's status information. For a <code>InvocationTargetException</code> - * a normal message dialog pops up showing the exception's message. Additionally the exception - * is written to the platform log. - */ -public class ExceptionHandler { - - private static ExceptionHandler fgInstance= new ExceptionHandler(); - - /** - * Logs the given exception using the platform's logging mechanism. The exception is - * logged as an error with the error code <code>JavaStatusConstants.INTERNAL_ERROR</code>. - */ - public static void log(Throwable t, String message) { - CompareUIPlugin.log(new Status(IStatus.ERROR, CompareUIPlugin.getPluginId(), - CompareUIPlugin.INTERNAL_ERROR, message, t)); - } - - /** - * Handles the given <code>CoreException</code>. The workbench shell is used as a parent - * for the dialog window. - * - * @param e the <code>CoreException</code> to be handled - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(CoreException e, String title, String message) { - handle(e, CompareUIPlugin.getShell(), title, message); - } - - /** - * Handles the given <code>CoreException</code>. - * - * @param e the <code>CoreException</code> to be handled - * @param parent the dialog window's parent shell - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(CoreException e, Shell parent, String title, String message) { - fgInstance.perform(e, parent, title, message); - } - - /** - * Handles the given <code>InvocationTargetException</code>. The workbench shell is used - * as a parent for the dialog window. - * - * @param e the <code>InvocationTargetException</code> to be handled - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(InvocationTargetException e, String title, String message) { - handle(e, CompareUIPlugin.getShell(), title, message); - } - - /** - * Handles the given <code>InvocationTargetException</code>. - * - * @param e the <code>InvocationTargetException</code> to be handled - * @param parent the dialog window's parent shell - * @param title the dialog window's window title - * @param message message to be displayed by the dialog window - */ - public static void handle(InvocationTargetException e, Shell parent, String title, String message) { - fgInstance.perform(e, parent, title, message); - } - - //---- Hooks for subclasses to control exception handling ------------------------------------ - - protected void perform(CoreException e, Shell shell, String title, String message) { - CompareUIPlugin.log(e); - IStatus status= e.getStatus(); - if (status != null) { - ErrorDialog.openError(shell, title, message, status); - } else { - displayMessageDialog(e, e.getMessage(), shell, title, message); - } - } - - protected void perform(InvocationTargetException e, Shell shell, String title, String message) { - Throwable target= e.getTargetException(); - if (target instanceof CoreException) { - perform((CoreException)target, shell, title, message); - } else { - CompareUIPlugin.log(e); - if (e.getMessage() != null && e.getMessage().length() > 0) { - displayMessageDialog(e, e.getMessage(), shell, title, message); - } else { - displayMessageDialog(e, target.getMessage(), shell, title, message); - } - } - } - - //---- Helper methods ----------------------------------------------------------------------- - - private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) { - StringWriter msg= new StringWriter(); - if (message != null) { - msg.write(message); - msg.write("\n\n"); //$NON-NLS-1$ - } - if (exceptionMessage == null || exceptionMessage.length() == 0) - msg.write(CompareMessages.getString("ExceptionDialog.seeErrorLogMessage")); //$NON-NLS-1$ - else - msg.write(exceptionMessage); - MessageDialog.openError(shell, title, msg.toString()); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java deleted file mode 100644 index a6df241e4..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.compare.CompareUI; - -/** - * Help context ids for the Compare UI. - * <p> - * This interface contains constants only; it is not intended to be implemented - * or extended. - * </p> - * - */ -public interface ICompareContextIds { - - public static final String PREFIX= CompareUI.PLUGIN_ID + '.'; - - // Dialogs - public static final String EDITION_DIALOG= PREFIX + "edition_dialog_context"; //$NON-NLS-1$ - - public static final String COMPARE_EDITOR= PREFIX + "compare_editor_context"; //$NON-NLS-1$ - public static final String PATCH_INPUT_WIZARD_PAGE= PREFIX + "patch_input_wizard_page_context"; //$NON-NLS-1$ - public static final String PATCH_PREVIEW_WIZARD_PAGE= PREFIX + "patch_preview_wizard_page_context"; //$NON-NLS-1$ - public static final String ADD_FROM_HISTORY_DIALOG= PREFIX + "add_from_history_dialog_context"; //$NON-NLS-1$ - public static final String COMPARE_DIALOG= PREFIX + "compare_dialog_context"; //$NON-NLS-1$ - public static final String COMPARE_WITH_EDITION_DIALOG= PREFIX + "compare_with_edition_dialog_context"; //$NON-NLS-1$ - public static final String REPLACE_WITH_EDITION_DIALOG= PREFIX + "replace_with_edition_dialog_context"; //$NON-NLS-1$ - - // Viewer - public static final String TEXT_MERGE_VIEW= PREFIX + "text_merge_view_context"; //$NON-NLS-1$ - public static final String IMAGE_COMPARE_VIEW= PREFIX + "image_compare_view_context"; //$NON-NLS-1$ - public static final String BINARY_COMPARE_VIEW= PREFIX + "binary_compare_view_context"; //$NON-NLS-1$ - public static final String DIFF_VIEW= PREFIX + "diff_view_context"; //$NON-NLS-1$ - - // Actions - public static final String GLOBAL_NEXT_DIFF_ACTION= PREFIX + "global_next_diff_action_context"; //$NON-NLS-1$ - public static final String GLOBAL_PREVIOUS_DIFF_ACTION= PREFIX + "global_previous_diff_action_context"; //$NON-NLS-1$ - public static final String NEXT_DIFF_ACTION= PREFIX + "next_diff_action_context"; //$NON-NLS-1$ - public static final String PREVIOUS_DIFF_ACTION= PREFIX + "previous_diff_action_context"; //$NON-NLS-1$ - public static final String IGNORE_WHITESPACE_ACTION= PREFIX + "ignore_whitespace_action_context"; //$NON-NLS-1$ - - // Preference page - public static final String COMPARE_PREFERENCE_PAGE= PREFIX + "compare_preference_page_context"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java deleted file mode 100644 index 3e64e2e9c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/INavigatable.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -public interface INavigatable { - - static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator"; //$NON-NLS-1$ - - /** - * Returns true if at end or beginning. - */ - boolean gotoDifference(boolean next); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java deleted file mode 100644 index 013885909..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IOpenable.java +++ /dev/null @@ -1,24 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -/* - * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106 - */ -public interface IOpenable { - - static final String OPENABLE_PROPERTY= "org.eclipse.compare.internal.Openable"; //$NON-NLS-1$ - - /** - * Opens the selected element - */ - void openSelected(); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java deleted file mode 100644 index a15db7c68..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavable.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -public interface ISavable { - - void save(IProgressMonitor pm) throws CoreException; -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java deleted file mode 100644 index f5a845e80..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IStructureCreatorDescriptor.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.compare.structuremergeviewer.IStructureCreator; - -/** - * A factory object for creating <code>IStructureCreator</code>s from a descriptor. - * <p> - * It is used when registering <code>IStructureCreator</code> for types - * in <code>CompareUIPlugin.registerStructureCreator</code>. - * </p> - * - * @see IStructureCreator - * @see CompareUIPlugin - */ -public interface IStructureCreatorDescriptor { - - /** - * Creates a new structure creator. - * - * @return a newly created structure creator - */ - IStructureCreator createStructureCreator(); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java deleted file mode 100644 index 2dda66e0d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IViewerDescriptor.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.compare.CompareConfiguration; - -/** - * A factory object for creating a <code>Viewer</code>s from a descriptor. - * <p> - * It is used when registering a viewer for a specific type - * in <code>CompareUIPlugin.registerContentViewerDescriptor</code> and - * in <code>CompareUIPlugin.registerStructureViewerDescriptor</code>. - * - * @see org.eclipse.compare.structuremergeviewer.IStructureCreator - * @see CompareUIPlugin - */ -public interface IViewerDescriptor { - - /** - * Creates a new viewer from this descriptor under the given STW parent control. - * If the current viewer has the same type as a new viewer - * the implementation of this method is free to return the current viewer instead. - * - * @param currentViewer the current viewer which is going to be replaced with a new viewer. - * @param parent the SWT parent control under which the new viewer has to be created. - * @param config a compare configuration the new viewer might be interested in. - * @return a new viewer or the current viewer. - */ - Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration config); -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java deleted file mode 100644 index b6b0fa14d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IgnoreWhiteSpaceAction.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.compare.*; - -/** - * Toggles the <code>ICompareConfiguration.IGNORE_WS</code> property of an - * <code>ICompareConfiguration</code>. - */ -public class IgnoreWhiteSpaceAction extends ChangePropertyAction { - - public IgnoreWhiteSpaceAction(ResourceBundle bundle, CompareConfiguration cc) { - super(bundle, cc, "action.IgnoreWhiteSpace.", CompareConfiguration.IGNORE_WHITESPACE); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java deleted file mode 100644 index f598f89b8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageCanvas.java +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.*; - -/** - * A <code>Canvas</code> showing a single centered SWT <code>Image</code>. - * If the <code>Image</code> is larger than the <code>Canvas<code>, - * <code>Scrollbars</code> will appear. - */ -class ImageCanvas extends Canvas { - - private Image fImage; - - /** - * Create a new ImageCanvas with the given SWT stylebits. - * (SWT.H_SCROLL and SWT.V_SCROLL are automtically added). - */ - public ImageCanvas(Composite parent, int style) { - super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL); - - ScrollBar sb= getHorizontalBar(); - sb.setIncrement(20); - sb.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - repaint(); - } - }); - - sb= getVerticalBar(); - sb.setIncrement(20); - sb.addListener(SWT.Selection, new Listener() { - public void handleEvent(Event e) { - repaint(); - } - }); - - addListener(SWT.Resize, new Listener() { - public void handleEvent(Event e) { - updateScrollbars(); - } - }); - - addListener(SWT.Paint, new Listener() { - public void handleEvent(Event event) { - paint(event.gc); - } - }); - } - - /** - * Set the SWT Image to use as the ImageCanvas contents. - */ - public void setImage(Image img) { - fImage= img; - - if (!isDisposed()) { - getHorizontalBar().setSelection(0); - getVerticalBar().setSelection(0); - updateScrollbars(); - getParent().layout(); - redraw(); - } - } - - public void repaint() { - if (!isDisposed()) { - GC gc= new GC(this); - paint(gc); - gc.dispose(); - } - } - - /** - * @private - */ - void paint(GC gc) { - if (fImage != null) { - Rectangle bounds= fImage.getBounds(); - Rectangle clientArea= getClientArea(); - - int x; - if (bounds.width < clientArea.width) - x= (clientArea.width - bounds.width) / 2; - else - x= -getHorizontalBar().getSelection(); - - int y; - if (bounds.height < clientArea.height) - y= (clientArea.height - bounds.height) / 2; - else - y= -getVerticalBar().getSelection(); - - gc.drawImage(fImage, x, y); - } - } - - /** - * @private - */ - void updateScrollbars() { - Rectangle bounds= fImage != null ? fImage.getBounds() : new Rectangle(0, 0, 0, 0); - Point size= getSize(); - Rectangle clientArea= getClientArea(); - - ScrollBar horizontal= getHorizontalBar(); - if (bounds.width <= clientArea.width) { - horizontal.setVisible(false); - horizontal.setSelection(0); - } else { - horizontal.setPageIncrement(clientArea.width - horizontal.getIncrement()); - int max= bounds.width + (size.x - clientArea.width); - horizontal.setMaximum(max); - horizontal.setThumb(size.x > max ? max : size.x); - horizontal.setVisible(true); - } - - ScrollBar vertical= getVerticalBar(); - if (bounds.height <= clientArea.height) { - vertical.setVisible(false); - vertical.setSelection(0); - } else { - vertical.setPageIncrement(clientArea.height - vertical.getIncrement()); - int max= bounds.height + (size.y - clientArea.height); - vertical.setMaximum(max); - vertical.setThumb(size.y > max ? max : size.y); - vertical.setVisible(true); - } - } - -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java deleted file mode 100644 index d205e2fd1..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.InputStream; -import java.io.IOException; -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTException; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.ContentMergeViewer; - -/** - */ -public class ImageMergeViewer extends ContentMergeViewer { - - private static final String BUNDLE_NAME= "org.eclipse.compare.internal.ImageMergeViewerResources"; //$NON-NLS-1$ - - private Object fLeftImage; - private Object fRightImage; - - private ImageCanvas fAncestor; - private ImageCanvas fLeft; - private ImageCanvas fRight; - - - public ImageMergeViewer(Composite parent, int styles, CompareConfiguration mp) { - super(styles, ResourceBundle.getBundle(BUNDLE_NAME), mp); - - WorkbenchHelp.setHelp(parent, ICompareContextIds.IMAGE_COMPARE_VIEW); - - buildControl(parent); - String title= Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$ - getControl().setData(CompareUI.COMPARE_VIEWER_TITLE, title); - } - - protected void updateContent(Object ancestor, Object left, Object right) { - - setInput(fAncestor, ancestor); - - fLeftImage= left; - setInput(fLeft, left); - - fRightImage= right; - setInput(fRight, right); - } - - /** - * We can't modify the contents of either side we just return null. - */ - protected byte[] getContents(boolean left) { - return null; - } - - public void createControls(Composite composite) { - fAncestor= new ImageCanvas(composite, SWT.NO_FOCUS); - fLeft= new ImageCanvas(composite, SWT.NO_FOCUS); - fRight= new ImageCanvas(composite, SWT.NO_FOCUS); - } - - private static void setInput(ImageCanvas canvas, Object input) { - if (canvas != null) { - - InputStream stream= null; - if (input instanceof IStreamContentAccessor) { - IStreamContentAccessor sca= (IStreamContentAccessor) input; - if (sca != null) { - try { - stream= sca.getContents(); - } catch (CoreException ex) { - // NeedWork - } - } - } - - Image image= null; - Display display= canvas.getDisplay(); - if (stream != null) { - try { - image= new Image(display, stream); - } catch (SWTException ex) { - // silently ignored - } - } - - canvas.setImage(image); - if (image != null) { - canvas.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND)); - } else { - canvas.setBackground(null); - } - - if (stream != null) { - try { - stream.close(); - } catch (IOException ex) { - // silently ignored - } - } - } - } - - protected void handleResizeAncestor(int x, int y, int width, int height) { - if (width > 0) { - fAncestor.setVisible(true); - fAncestor.setBounds(x, y, width, height); - } else { - fAncestor.setVisible(false); - } - } - - protected void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2, int height) { - fLeft.setBounds(x, y, width1, height); - fRight.setBounds(x+width1+centerWidth, y, width2, height); - } - - protected void copy(boolean leftToRight) { - if (leftToRight) { - fRightImage= fLeftImage; - setInput(fRight, fRightImage); - setRightDirty(true); - } else { - fLeftImage= fRightImage; - setInput(fLeft, fLeftImage); - setLeftDirty(true); - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java deleted file mode 100644 index ae0ab7813..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerCreator.java +++ /dev/null @@ -1,30 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.compare.*; -import org.eclipse.jface.viewers.Viewer; - -/** - * A factory object for the <code>ImageMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class ImageMergeViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new ImageMergeViewer(parent, SWT.NULL, mp); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties deleted file mode 100644 index cb23466b0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewerResources.properties +++ /dev/null @@ -1,32 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)ImageMergeViewerResources.properties -# -# Resource strings for ImageMergeViewer.java - -title= Image Compare - -##################################################### -# Actions -##################################################### - -action.CopyLeftToRight.label= Copy Left to Right -action.CopyLeftToRight.tooltip= Copy Image from Left to Right -action.CopyLeftToRight.image= elcl16/copy_r_co.gif - -action.CopyRightToLeft.label= Copy Right to Left -action.CopyRightToLeft.tooltip= Copy Image from Right to Left -action.CopyRightToLeft.image= elcl16/copy_l_co.gif - -action.EnableAncestor.label= Enable Ancestor Pane -action.EnableAncestor.tooltip= Control Visibility of Ancestor Pane -action.EnableAncestor.image= elcl16/ancestorpane_co.gif diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java deleted file mode 100644 index b39150c19..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.List; - -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.Viewer; - -/** - * A specialized content provider to show a list of editor parts. - */ -public class ListContentProvider implements IStructuredContentProvider { - List fContents; - - public ListContentProvider() { - } - - public Object[] getElements(Object input) { - if (fContents != null && fContents == input) - return fContents.toArray(); - return new Object[0]; - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - if (newInput instanceof List) - fContents= (List)newInput; - else - fContents= null; - // we use a fixed set. - } - - public void dispose() { - } - - public boolean isDeleted(Object o) { - return fContents != null && !fContents.contains(o); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java deleted file mode 100644 index 5df991bc3..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListDialog.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.viewers.*; - -import org.eclipse.ui.dialogs.SelectionDialog; - -public class ListDialog extends SelectionDialog { - - private IStructuredContentProvider fContentProvider; - private ILabelProvider fLabelProvider; - private Object fInput; - private TableViewer fTableViewer; - private boolean fAddCancelButton; - - public ListDialog(Shell parent) { - super(parent); - fAddCancelButton= false; - } - - public void setInput(Object input) { - fInput= input; - } - - public void setContentProvider(IStructuredContentProvider sp){ - fContentProvider= sp; - } - - public void setLabelProvider(ILabelProvider lp){ - fLabelProvider= lp; - } - - public void setAddCancelButton(boolean addCancelButton) { - fAddCancelButton= addCancelButton; - } - - public TableViewer getTableViewer(){ - return fTableViewer; - } - - public boolean hasFilters(){ - return fTableViewer.getFilters() != null && fTableViewer.getFilters().length != 0; - } - - public void create() { - setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE); - super.create(); - } - - protected void createButtonsForButtonBar(Composite parent) { - if (! fAddCancelButton) - createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); - else - super.createButtonsForButtonBar(parent); - } - - protected Control createDialogArea(Composite container) { - Composite parent= (Composite) super.createDialogArea(container); - createMessageArea(parent); - fTableViewer= new TableViewer(parent, getTableStyle()); - fTableViewer.setContentProvider(fContentProvider); - Table table= fTableViewer.getTable(); - fTableViewer.setLabelProvider(fLabelProvider); - fTableViewer.setInput(fInput); - GridData gd= new GridData(GridData.FILL_BOTH); - gd.heightHint= convertHeightInCharsToPixels(15); - gd.widthHint= convertWidthInCharsToPixels(55); - table.setLayoutData(gd); - applyDialogFont(parent); - return parent; - } - - protected int getTableStyle() { - return SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java deleted file mode 100644 index 707b2f1ef..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java +++ /dev/null @@ -1,398 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.graphics.Font; - -import org.eclipse.jface.action.*; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.text.*; -import org.eclipse.jface.text.source.*; - -import org.eclipse.jface.viewers.SelectionChangedEvent; -/** - * Extends the JFace SourceViewer with some convenience methods. - */ -public class MergeSourceViewer extends SourceViewer - implements ISelectionChangedListener, ITextListener, IMenuListener { - - public static final String UNDO_ID= "undo"; //$NON-NLS-1$ - public static final String REDO_ID= "redo"; //$NON-NLS-1$ - public static final String CUT_ID= "cut"; //$NON-NLS-1$ - public static final String COPY_ID= "copy"; //$NON-NLS-1$ - public static final String PASTE_ID= "paste"; //$NON-NLS-1$ - public static final String DELETE_ID= "delete"; //$NON-NLS-1$ - public static final String SELECT_ALL_ID= "selectAll"; //$NON-NLS-1$ - public static final String SAVE_ID= "save"; //$NON-NLS-1$ - - class TextOperationAction extends MergeViewerAction { - - private int fOperationCode; - - TextOperationAction(int operationCode, boolean mutable, boolean selection, boolean content) { - super(mutable, selection, content); - fOperationCode= operationCode; - update(); - } - - public void run() { - if (isEnabled()) - doOperation(fOperationCode); - } - - public boolean isEnabled() { - return fOperationCode != -1 && canDoOperation(fOperationCode); - } - - public void update() { - this.setEnabled(isEnabled()); - } - } - - private ResourceBundle fResourceBundle; - private Position fRegion; - private boolean fEnabled= true; - private HashMap fActions= new HashMap(); - - private boolean fAddSaveAction= true; - - - public MergeSourceViewer(Composite parent, ResourceBundle bundle) { - super(parent, null, SWT.H_SCROLL + SWT.V_SCROLL); - - fResourceBundle= bundle; - - MenuManager menu= new MenuManager(); - menu.setRemoveAllWhenShown(true); - menu.addMenuListener(this); - StyledText te= getTextWidget(); - te.setMenu(menu.createContextMenu(te)); - } - - public void hideSaveAction() { - fAddSaveAction= false; - } - - public void setFont(Font font) { - StyledText te= getTextWidget(); - if (te != null) - te.setFont(font); - } - - public void setBackgroundColor(Color color) { - StyledText te= getTextWidget(); - if (te != null) - te.setBackground(color); - } - - public void setEnabled(boolean enabled) { - if (enabled != fEnabled) { - fEnabled= enabled; - StyledText c= getTextWidget(); - if (c != null) { - c.setEnabled(enabled); - Display d= c.getDisplay(); - c.setBackground(enabled ? d.getSystemColor(SWT.COLOR_LIST_BACKGROUND) : null); - } - } - } - - public boolean getEnabled() { - return fEnabled; - } - - public void setRegion(Position region) { - fRegion= region; - } - - public Position getRegion() { - return fRegion; - } - - public boolean isControlOkToUse() { - StyledText t= getTextWidget(); - return t != null && !t.isDisposed(); - } - - public void setSelection(Position position) { - if (position != null) - setSelectedRange(position.getOffset(), position.getLength()); - } - - public void setLineBackground(Position position, Color c) { - StyledText t= getTextWidget(); - if (t != null && !t.isDisposed()) { - Point region= new Point(0, 0); - getLineRange(position, region); - - region.x-= getDocumentRegionOffset(); - - try { - t.setLineBackground(region.x, region.y, c); - } catch (IllegalArgumentException ex) { - // silently ignored - } - } - } - - public void resetLineBackground() { - StyledText t= getTextWidget(); - if (t != null && !t.isDisposed()) { - int lines= getLineCount(); - t.setLineBackground(0, lines, null); - } - } - - /** - * Returns number of lines in document region. - */ - public int getLineCount() { - IRegion region= getVisibleRegion(); - - int length= region.getLength(); - if (length == 0) - return 0; - - IDocument doc= getDocument(); - int startLine= 0; - int endLine= 0; - - int start= region.getOffset(); - try { - startLine= doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - // silently ignored - } - try { - endLine= doc.getLineOfOffset(start+length); - } catch(BadLocationException ex) { - // silently ignored - } - - return endLine-startLine+1; - } - - public int getViewportLines() { - StyledText te= getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height / te.getLineHeight(); - return 0; - } - - public int getViewportHeight() { - StyledText te= getTextWidget(); - Rectangle clArea= te.getClientArea(); - if (!clArea.isEmpty()) - return clArea.height; - return 0; - } - - /** - * Returns lines - */ - public int getDocumentRegionOffset() { - int start= getVisibleRegion().getOffset(); - IDocument doc= getDocument(); - if (doc != null) { - try { - return doc.getLineOfOffset(start); - } catch(BadLocationException ex) { - // silently ignored - } - } - return 0; - } - - public int getVerticalScrollOffset() { - StyledText st= getTextWidget(); - int lineHeight= st.getLineHeight(); - return getTopInset() - ((getDocumentRegionOffset()*lineHeight) + st.getTopPixel()); - } - - /** - * Returns the start line and the number of lines which correspond to the given position. - * Starting line number is 0 based. - */ - public Point getLineRange(Position p, Point region) { - - IDocument doc= getDocument(); - - if (p == null || doc == null) { - region.x= 0; - region.y= 0; - return region; - } - - int start= p.getOffset(); - int length= p.getLength(); - - int startLine= 0; - try { - startLine= doc.getLineOfOffset(start); - } catch (BadLocationException e) { - // silently ignored - } - - int lineCount= 0; - - if (length == 0) { -// // if range length is 0 and if range starts a new line -// try { -// if (start == doc.getLineStartOffset(startLine)) { -// lines--; -// } -// } catch (BadLocationException e) { -// lines--; -// } - - } else { - int endLine= 0; - try { - endLine= doc.getLineOfOffset(start + length - 1); // why -1? - } catch (BadLocationException e) { - // silently ignored - } - lineCount= endLine-startLine+1; - } - - region.x= startLine; - region.y= lineCount; - return region; - } - - /** - * Scroll TextPart to the given line. - */ - public void vscroll(int line) { - - int srcViewSize= getLineCount(); - int srcExtentSize= getViewportLines(); - - if (srcViewSize > srcExtentSize) { - - if (line < 0) - line= 0; - - int cp= getTopIndex(); - if (cp != line) - setTopIndex(line + getDocumentRegionOffset()); - } - } - - public void addAction(String actionId, MergeViewerAction action) { - fActions.put(actionId, action); - } - - public MergeViewerAction getAction(String actionId) { - MergeViewerAction action= (MergeViewerAction) fActions.get(actionId); - if (action == null) { - action= createAction(actionId); - if (action == null) - return null; - - if (action.isContentDependent()) - addTextListener(this); - if (action.isSelectionDependent()) - addSelectionChangedListener(this); - - Utilities.initAction(action, fResourceBundle, "action." + actionId + "."); //$NON-NLS-1$ //$NON-NLS-2$ - fActions.put(actionId, action); - } - if (action.isEditableDependent() && !isEditable()) - return null; - return action; - } - - protected MergeViewerAction createAction(String actionId) { - if (UNDO_ID.equals(actionId)) - return new TextOperationAction(UNDO, true, false, true); - if (REDO_ID.equals(actionId)) - return new TextOperationAction(REDO, true, false, true); - if (CUT_ID.equals(actionId)) - return new TextOperationAction(CUT, true, true, false); - if (COPY_ID.equals(actionId)) - return new TextOperationAction(COPY, false, true, false); - if (PASTE_ID.equals(actionId)) - return new TextOperationAction(PASTE, true, false, false); - if (DELETE_ID.equals(actionId)) - return new TextOperationAction(DELETE, true, false, false); - if (SELECT_ALL_ID.equals(actionId)) - return new TextOperationAction(SELECT_ALL, false, false, false); - return null; - } - - public void selectionChanged(SelectionChangedEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - MergeViewerAction action= (MergeViewerAction) e.next(); - if (action.isSelectionDependent()) - action.update(); - } - } - - public void textChanged(TextEvent event) { - Iterator e= fActions.values().iterator(); - while (e.hasNext()) { - MergeViewerAction action= (MergeViewerAction) e.next(); - if (action.isContentDependent()) - action.update(); - } - } - - /** - * Allows the viewer to add menus and/or tools to the context menu. - */ - public void menuAboutToShow(IMenuManager menu) { - - menu.add(new Separator("undo")); //$NON-NLS-1$ - addMenu(menu, UNDO_ID); - addMenu(menu, REDO_ID); - - menu.add(new Separator("ccp")); //$NON-NLS-1$ - addMenu(menu, CUT_ID); - addMenu(menu, COPY_ID); - addMenu(menu, PASTE_ID); - addMenu(menu, DELETE_ID); - addMenu(menu, SELECT_ALL_ID); - - menu.add(new Separator("edit")); //$NON-NLS-1$ - menu.add(new Separator("find")); //$NON-NLS-1$ - //addMenu(menu, FIND_ID); - - menu.add(new Separator("save")); //$NON-NLS-1$ - if (fAddSaveAction) - addMenu(menu, SAVE_ID); - - menu.add(new Separator("rest")); //$NON-NLS-1$ - } - - private void addMenu(IMenuManager menu, String actionId) { - IAction action= getAction(actionId); - if (action != null) - menu.add(action); - } - - protected void handleDispose() { - - removeTextListener(this); - removeSelectionChangedListener(this); - - super.handleDispose(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java deleted file mode 100644 index 590ab8696..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.ui.texteditor.IUpdate; -import org.eclipse.jface.action.Action; - - -public abstract class MergeViewerAction extends Action implements IUpdate { - - private boolean fMutable; - private boolean fSelection; - private boolean fContent; - - public MergeViewerAction(boolean mutable, boolean selection, boolean content) { - fMutable= mutable; - fSelection= selection; - fContent= content; - } - - public boolean isSelectionDependent() { - return fSelection; - } - - public boolean isContentDependent() { - return fContent; - } - - public boolean isEditableDependent() { - return fMutable; - } - - public void update() { - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java deleted file mode 100644 index a21e6a4cd..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.graphics.Image; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; -import org.eclipse.compare.contentmergeviewer.IMergeViewerContentProvider; - -/** - * Adapts any <code>ContentMergeViewer</code> to work on an <code>ICompareInput</code> - * e.g. a <code>DiffNode</code>. - */ -public class MergeViewerContentProvider implements IMergeViewerContentProvider { - - private CompareConfiguration fCompareConfiguration; - - public MergeViewerContentProvider(CompareConfiguration cc) { - fCompareConfiguration= cc; - } - - public void dispose() { - } - - public void inputChanged(Viewer v, Object o1, Object o2) { - // we are not interested since we have no state - } - - //---- ancestor - - public String getAncestorLabel(Object element) { - return fCompareConfiguration.getAncestorLabel(element); - } - - public Image getAncestorImage(Object element) { - return fCompareConfiguration.getAncestorImage(element); - } - - public Object getAncestorContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getAncestor(); - return null; - } - - public boolean showAncestor(Object element) { - if (element instanceof ICompareInput) - return true; // fix for #45239: Show ancestor for incoming and outgoing changes - //return (((ICompareInput)element).getKind() & Differencer.DIRECTION_MASK) == Differencer.CONFLICTING; - return false; - } - - //---- left - - public String getLeftLabel(Object element) { - return fCompareConfiguration.getLeftLabel(element); - } - - public Image getLeftImage(Object element) { - return fCompareConfiguration.getLeftImage(element); - } - - public Object getLeftContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getLeft(); - return null; - } - - public boolean isLeftEditable(Object element) { - if (element instanceof ICompareInput) { - Object left= ((ICompareInput) element).getLeft(); - if (left == null) { - IDiffElement parent= ((IDiffElement)element).getParent(); - if (parent instanceof ICompareInput) - left= ((ICompareInput) parent).getLeft(); - } - if (left instanceof IEditableContent) - return ((IEditableContent)left).isEditable(); - } - return false; - } - - public void saveLeftContent(Object element, byte[] bytes) { - if (element instanceof ICompareInput) { - ICompareInput node= (ICompareInput) element; - if (bytes != null) { - ITypedElement left= node.getLeft(); - // #9869: problem if left is null (because no resource exists yet) nothing is done! - if (left == null) { - node.copy(false); - left= node.getLeft(); - } - if (left instanceof IEditableContent) - ((IEditableContent)left).setContent(bytes); - if (node instanceof ResourceCompareInput.MyDiffNode) - ((ResourceCompareInput.MyDiffNode)node).fireChange(); - } else { - node.copy(false); - } - } - } - - //---- right - - public String getRightLabel(Object element) { - return fCompareConfiguration.getRightLabel(element); - } - - public Image getRightImage(Object element) { - return fCompareConfiguration.getRightImage(element); - } - - public Object getRightContent(Object element) { - if (element instanceof ICompareInput) - return ((ICompareInput) element).getRight(); - return null; - } - - public boolean isRightEditable(Object element) { - if (element instanceof ICompareInput) { - Object right= ((ICompareInput) element).getRight(); - if (right == null) { - IDiffContainer parent= ((IDiffElement)element).getParent(); - if (parent instanceof ICompareInput) - right= ((ICompareInput) parent).getRight(); - } - if (right instanceof IEditableContent) - return ((IEditableContent)right).isEditable(); - } - return false; - } - - public void saveRightContent(Object element, byte[] bytes) { - if (element instanceof ICompareInput) { - ICompareInput node= (ICompareInput) element; - if (bytes != null) { - ITypedElement right= node.getRight(); - // #9869: problem if right is null (because no resource exists yet) nothing is done! - if (right == null) { - node.copy(true); - right= node.getRight(); - } - if (right instanceof IEditableContent) - ((IEditableContent)right).setContent(bytes); - if (node instanceof ResourceCompareInput.MyDiffNode) - ((ResourceCompareInput.MyDiffNode)node).fireChange(); - } else { - node.copy(true); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java deleted file mode 100644 index 495a8cf28..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NullViewer.java +++ /dev/null @@ -1,35 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.*; - -import org.eclipse.compare.CompareViewerPane; - -/** - * Used whenever the input is null or no viewer can be found. - */ -public class NullViewer extends AbstractViewer { - - private Control fDummy; - - public NullViewer(Composite parent) { - - fDummy= new Tree(parent, SWT.NULL); - - CompareViewerPane.clearToolBar(parent); - } - - public Control getControl() { - return fDummy; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java deleted file mode 100644 index 9fd741dad..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java +++ /dev/null @@ -1,451 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceStore; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; - -/** - * An overlaying preference store. - */ -public class OverlayPreferenceStore implements IPreferenceStore { - - - public static final class TypeDescriptor { - private TypeDescriptor() { - } - } - - public static final TypeDescriptor BOOLEAN= new TypeDescriptor(); - public static final TypeDescriptor DOUBLE= new TypeDescriptor(); - public static final TypeDescriptor FLOAT= new TypeDescriptor(); - public static final TypeDescriptor INT= new TypeDescriptor(); - public static final TypeDescriptor LONG= new TypeDescriptor(); - public static final TypeDescriptor STRING= new TypeDescriptor(); - - public static class OverlayKey { - - TypeDescriptor fDescriptor; - String fKey; - - public OverlayKey(TypeDescriptor descriptor, String key) { - fDescriptor= descriptor; - fKey= key; - } - } - - private class PropertyListener implements IPropertyChangeListener { - - /* - * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - OverlayKey key= findOverlayKey(event.getProperty()); - if (key != null) - propagateProperty(fParent, key, fStore); - } - } - - - private IPreferenceStore fParent; - private IPreferenceStore fStore; - private OverlayKey[] fOverlayKeys; - - private PropertyListener fPropertyListener; - - - public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) { - fParent= parent; - fOverlayKeys= overlayKeys; - fStore= new PreferenceStore(); - } - - private OverlayKey findOverlayKey(String key) { - for (int i= 0; i < fOverlayKeys.length; i++) { - if (fOverlayKeys[i].fKey.equals(key)) - return fOverlayKeys[i]; - } - return null; - } - - private boolean covers(String key) { - return (findOverlayKey(key) != null); - } - - private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) { - - if (orgin.isDefault(key.fKey)) { - if (!target.isDefault(key.fKey)) - target.setToDefault(key.fKey); - return; - } - - TypeDescriptor d= key.fDescriptor; - if (BOOLEAN == d) { - - boolean originValue= orgin.getBoolean(key.fKey); - boolean targetValue= target.getBoolean(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (DOUBLE == d) { - - double originValue= orgin.getDouble(key.fKey); - double targetValue= target.getDouble(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (FLOAT == d) { - - float originValue= orgin.getFloat(key.fKey); - float targetValue= target.getFloat(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (INT == d) { - - int originValue= orgin.getInt(key.fKey); - int targetValue= target.getInt(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (LONG == d) { - - long originValue= orgin.getLong(key.fKey); - long targetValue= target.getLong(key.fKey); - if (targetValue != originValue) - target.setValue(key.fKey, originValue); - - } else if (STRING == d) { - - String originValue= orgin.getString(key.fKey); - String targetValue= target.getString(key.fKey); - if (targetValue != null && originValue != null && !targetValue.equals(originValue)) - target.setValue(key.fKey, originValue); - - } - } - - public void propagate() { - for (int i= 0; i < fOverlayKeys.length; i++) - propagateProperty(fStore, fOverlayKeys[i], fParent); - } - - private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) { - TypeDescriptor d= key.fDescriptor; - if (BOOLEAN == d) { - - if (forceInitialization) - target.setValue(key.fKey, true); - target.setValue(key.fKey, orgin.getBoolean(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey)); - - } else if (DOUBLE == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1.0D); - target.setValue(key.fKey, orgin.getDouble(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey)); - - } else if (FLOAT == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1.0F); - target.setValue(key.fKey, orgin.getFloat(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey)); - - } else if (INT == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1); - target.setValue(key.fKey, orgin.getInt(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey)); - - } else if (LONG == d) { - - if (forceInitialization) - target.setValue(key.fKey, 1L); - target.setValue(key.fKey, orgin.getLong(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey)); - - } else if (STRING == d) { - - if (forceInitialization) - target.setValue(key.fKey, "1"); //$NON-NLS-1$ - target.setValue(key.fKey, orgin.getString(key.fKey)); - target.setDefault(key.fKey, orgin.getDefaultString(key.fKey)); - - } - } - - public void load() { - for (int i= 0; i < fOverlayKeys.length; i++) - loadProperty(fParent, fOverlayKeys[i], fStore, true); - } - - public void loadDefaults() { - for (int i= 0; i < fOverlayKeys.length; i++) - setToDefault(fOverlayKeys[i].fKey); - } - - public void start() { - if (fPropertyListener == null) { - fPropertyListener= new PropertyListener(); - fParent.addPropertyChangeListener(fPropertyListener); - } - } - - public void stop() { - if (fPropertyListener != null) { - fParent.removePropertyChangeListener(fPropertyListener); - fPropertyListener= null; - } - } - - /* - * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener) - */ - public void addPropertyChangeListener(IPropertyChangeListener listener) { - fStore.addPropertyChangeListener(listener); - } - - /* - * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener) - */ - public void removePropertyChangeListener(IPropertyChangeListener listener) { - fStore.removePropertyChangeListener(listener); - } - - /* - * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object) - */ - public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) { - fStore.firePropertyChangeEvent(name, oldValue, newValue); - } - - /* - * @see IPreferenceStore#contains(String) - */ - public boolean contains(String name) { - return fStore.contains(name); - } - - /* - * @see IPreferenceStore#getBoolean(String) - */ - public boolean getBoolean(String name) { - return fStore.getBoolean(name); - } - - /* - * @see IPreferenceStore#getDefaultBoolean(String) - */ - public boolean getDefaultBoolean(String name) { - return fStore.getDefaultBoolean(name); - } - - /* - * @see IPreferenceStore#getDefaultDouble(String) - */ - public double getDefaultDouble(String name) { - return fStore.getDefaultDouble(name); - } - - /* - * @see IPreferenceStore#getDefaultFloat(String) - */ - public float getDefaultFloat(String name) { - return fStore.getDefaultFloat(name); - } - - /* - * @see IPreferenceStore#getDefaultInt(String) - */ - public int getDefaultInt(String name) { - return fStore.getDefaultInt(name); - } - - /* - * @see IPreferenceStore#getDefaultLong(String) - */ - public long getDefaultLong(String name) { - return fStore.getDefaultLong(name); - } - - /* - * @see IPreferenceStore#getDefaultString(String) - */ - public String getDefaultString(String name) { - return fStore.getDefaultString(name); - } - - /* - * @see IPreferenceStore#getDouble(String) - */ - public double getDouble(String name) { - return fStore.getDouble(name); - } - - /* - * @see IPreferenceStore#getFloat(String) - */ - public float getFloat(String name) { - return fStore.getFloat(name); - } - - /* - * @see IPreferenceStore#getInt(String) - */ - public int getInt(String name) { - return fStore.getInt(name); - } - - /* - * @see IPreferenceStore#getLong(String) - */ - public long getLong(String name) { - return fStore.getLong(name); - } - - /* - * @see IPreferenceStore#getString(String) - */ - public String getString(String name) { - return fStore.getString(name); - } - - /* - * @see IPreferenceStore#isDefault(String) - */ - public boolean isDefault(String name) { - return fStore.isDefault(name); - } - - /* - * @see IPreferenceStore#needsSaving() - */ - public boolean needsSaving() { - return fStore.needsSaving(); - } - - /* - * @see IPreferenceStore#putValue(String, String) - */ - public void putValue(String name, String value) { - if (covers(name)) - fStore.putValue(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, double) - */ - public void setDefault(String name, double value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, float) - */ - public void setDefault(String name, float value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, int) - */ - public void setDefault(String name, int value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, long) - */ - public void setDefault(String name, long value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, String) - */ - public void setDefault(String name, String value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setDefault(String, boolean) - */ - public void setDefault(String name, boolean value) { - if (covers(name)) - fStore.setDefault(name, value); - } - - /* - * @see IPreferenceStore#setToDefault(String) - */ - public void setToDefault(String name) { - fStore.setToDefault(name); - } - - /* - * @see IPreferenceStore#setValue(String, double) - */ - public void setValue(String name, double value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, float) - */ - public void setValue(String name, float value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, int) - */ - public void setValue(String name, int value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, long) - */ - public void setValue(String name, long value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, String) - */ - public void setValue(String name, String value) { - if (covers(name)) - fStore.setValue(name, value); - } - - /* - * @see IPreferenceStore#setValue(String, boolean) - */ - public void setValue(String name, boolean value) { - if (covers(name)) - fStore.setValue(name, value); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java deleted file mode 100644 index fdcc7bf68..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ReplaceWithEditionAction extends EditionAction { - - public ReplaceWithEditionAction() { - super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$ - fHelpContextId= ICompareContextIds.REPLACE_WITH_EDITION_DIALOG; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties deleted file mode 100644 index db582dff6..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.properties +++ /dev/null @@ -1,40 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# @(#)ReplaceWithEditionAction.properties -# -# Resources for ReplaceWithEditionAction.java - -title= Replace from Local History - -treeTitleFormat= Local History of ''{0}'' -dateIcon= obj16/day_obj.gif -timeIcon= obj16/resource_obj.gif - -treeFormat= {0} -workspaceTreeFormat= {0} (Workspace File) -parseErrorFormat= {0} (Parse Error) - -editionLabel= Local History ({0}) -workspaceEditionLabel= Workspace File - -targetLabel= {0} - -todayFormat= Today ({0}) -yesterdayFormat= Yesterday ({0}) -dayFormat= {0} - -buttonLabel= Replace - -noLocalHistoryError= No local history available for selected resource. -replaceError=Can''t replace resource (reason: {0}). - -taskName=Replacing
\ No newline at end of file diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java deleted file mode 100644 index 3fa6b07aa..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ReplaceWithPreviousEditionAction extends EditionAction { - - public ReplaceWithPreviousEditionAction() { - super(true, - "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$ - fPrevious= true; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java deleted file mode 100644 index 423ba9711..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java +++ /dev/null @@ -1,161 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.dialogs.DialogSettings; - - -/** - * Base class for resizable Dialogs with persistent window bounds. - */ -public abstract class ResizableDialog extends Dialog { - - // dialog store id constants - private final static String DIALOG_BOUNDS_KEY= "ResizableDialogBounds"; //$NON-NLS-1$ - private static final String X= "x"; //$NON-NLS-1$ - private static final String Y= "y"; //$NON-NLS-1$ - private static final String WIDTH= "width"; //$NON-NLS-1$ - private static final String HEIGHT= "height"; //$NON-NLS-1$ - - protected ResourceBundle fBundle; - private Rectangle fNewBounds; - private IDialogSettings fSettings; - private String fContextId; - - - public ResizableDialog(Shell parent, ResourceBundle bundle) { - super(parent); - setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX); - - fBundle= bundle; - - fSettings= CompareUIPlugin.getDefault().getDialogSettings(); - } - - public void setHelpContextId(String contextId) { - fContextId= contextId; - } - - /* - * @see org.eclipse.jface.window.Window#configureShell(Shell) - */ - protected void configureShell(Shell newShell) { - super.configureShell(newShell); - if (fContextId != null) - WorkbenchHelp.setHelp(newShell, fContextId); - } - - protected Point getInitialSize() { - - int width= 0; - int height= 0; - - final Shell s= getShell(); - if (s != null) { - s.addControlListener( - new ControlListener() { - public void controlMoved(ControlEvent arg0) { - fNewBounds= s.getBounds(); - } - public void controlResized(ControlEvent arg0) { - fNewBounds= s.getBounds(); - } - } - ); - } - - IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); //$NON-NLS-1$ - if (bounds == null) { - if (fBundle != null) { - width= Utilities.getInteger(fBundle, WIDTH, 0); - height= Utilities.getInteger(fBundle, HEIGHT, 0); - Shell shell= getParentShell(); - if (shell != null) { - Point parentSize= shell.getSize(); - if (width <= 0) - width= parentSize.x-300; - if (height <= 0) - height= parentSize.y-200; - } - } else { - Shell shell= getParentShell(); - if (shell != null) { - Point parentSize= shell.getSize(); - width= parentSize.x-100; - height= parentSize.y-100; - } - } - if (width < 700) - width= 700; - if (height < 500) - height= 500; - } else { - try { - width= bounds.getInt(WIDTH); - } catch (NumberFormatException e) { - width= 700; - } - try { - height= bounds.getInt(HEIGHT); - } catch (NumberFormatException e) { - height= 500; - } - } - - return new Point(width, height); - } - - protected Point getInitialLocation(Point initialSize) { - Point loc= super.getInitialLocation(initialSize); - - IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY); - if (bounds != null) { - try { - loc.x= bounds.getInt(X); - } catch (NumberFormatException e) { - } - try { - loc.y= bounds.getInt(Y); - } catch (NumberFormatException e) { - } - } - return loc; - } - - public boolean close() { - boolean closed= super.close(); - if (closed && fNewBounds != null) - saveBounds(fNewBounds); - return closed; - } - - private void saveBounds(Rectangle bounds) { - IDialogSettings dialogBounds= fSettings.getSection(DIALOG_BOUNDS_KEY); - if (dialogBounds == null) { - dialogBounds= new DialogSettings(DIALOG_BOUNDS_KEY); - fSettings.addSection(dialogBounds); - } - dialogBounds.put(X, bounds.x); - dialogBounds.put(Y, bounds.y); - dialogBounds.put(WIDTH, bounds.width); - dialogBounds.put(HEIGHT, bounds.height); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java deleted file mode 100644 index 042aac14c..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java +++ /dev/null @@ -1,367 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.text.MessageFormat; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * A two-way or three-way compare for arbitrary IResources. - */ -class ResourceCompareInput extends CompareEditorInput { - - private static final boolean NORMALIZE_CASE= true; - - private boolean fThreeWay= false; - private Object fRoot; - private IStructureComparator fAncestor; - private IStructureComparator fLeft; - private IStructureComparator fRight; - private IResource fAncestorResource; - private IResource fLeftResource; - private IResource fRightResource; - private DiffTreeViewer fDiffViewer; - private IAction fOpenAction; - - class MyDiffNode extends DiffNode { - - private boolean fDirty= false; - private ITypedElement fLastId; - private String fLastName; - - - public MyDiffNode(IDiffContainer parent, int description, ITypedElement ancestor, ITypedElement left, ITypedElement right) { - super(parent, description, ancestor, left, right); - } - public void fireChange() { - super.fireChange(); - setDirty(true); - fDirty= true; - if (fDiffViewer != null) - fDiffViewer.refresh(this); - } - void clearDirty() { - fDirty= false; - } - public String getName() { - if (fLastName == null) - fLastName= super.getName(); - if (fDirty) - return '<' + fLastName + '>'; - return fLastName; - } - - public ITypedElement getId() { - ITypedElement id= super.getId(); - if (id == null) - return fLastId; - fLastId= id; - return id; - } - } - - /** - * Creates an compare editor input for the given selection. - */ - ResourceCompareInput(CompareConfiguration config) { - super(config); - } - - public Viewer createDiffViewer(Composite parent) { - fDiffViewer= new DiffTreeViewer(parent, getCompareConfiguration()) { - protected void fillContextMenu(IMenuManager manager) { - - if (fOpenAction == null) { - fOpenAction= new Action() { - public void run() { - handleOpen(null); - } - }; - Utilities.initAction(fOpenAction, getBundle(), "action.CompareContents."); //$NON-NLS-1$ - } - - boolean enable= false; - ISelection selection= getSelection(); - if (selection instanceof IStructuredSelection) { - IStructuredSelection ss= (IStructuredSelection)selection; - if (ss.size() == 1) { - Object element= ss.getFirstElement(); - if (element instanceof MyDiffNode) { - ITypedElement te= ((MyDiffNode) element).getId(); - if (te != null) - enable= !ITypedElement.FOLDER_TYPE.equals(te.getType()); - } else - enable= true; - } - } - fOpenAction.setEnabled(enable); - - manager.add(fOpenAction); - - super.fillContextMenu(manager); - } - }; - return fDiffViewer; - } - - void setSelection(ISelection s) { - - IResource[] selection= Utilities.getResources(s); - - fThreeWay= selection.length == 3; - - fAncestorResource= null; - fLeftResource= selection[0]; - fRightResource= selection[1]; - if (fThreeWay) { - fLeftResource= selection[1]; - fRightResource= selection[2]; - } - - fAncestor= null; - fLeft= getStructure(fLeftResource); - fRight= getStructure(fRightResource); - - if (fThreeWay) { - fAncestorResource= selection[0]; - fAncestor= getStructure(fAncestorResource); - } - } - - /** - * Returns true if compare can be executed for the given selection. - */ - public boolean isEnabled(ISelection s) { - - IResource[] selection= Utilities.getResources(s); - if (selection.length < 2 || selection.length > 3) - return false; - - fThreeWay= selection.length == 3; - - fLeftResource= selection[0]; - fRightResource= selection[1]; - if (fThreeWay) { - fLeftResource= selection[1]; - fRightResource= selection[2]; - } - - if (!comparable(fLeftResource, fRightResource)) - return false; - - if (fThreeWay) { - fAncestorResource= selection[0]; - - if (!comparable(fLeftResource, fRightResource)) - return false; - } - - return true; - } - - /** - * Initializes the images in the compare configuration. - */ - void initializeCompareConfiguration() { - CompareConfiguration cc= getCompareConfiguration(); - if (fLeftResource != null) { - cc.setLeftLabel(buildLabel(fLeftResource)); - cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource)); - } - if (fRightResource != null) { - cc.setRightLabel(buildLabel(fRightResource)); - cc.setRightImage(CompareUIPlugin.getImage(fRightResource)); - } - if (fThreeWay && fAncestorResource != null) { - cc.setAncestorLabel(buildLabel(fAncestorResource)); - cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource)); - } - } - - /** - * Returns true if both resources are either structured or unstructured. - */ - private boolean comparable(IResource c1, IResource c2) { - return hasStructure(c1) == hasStructure(c2); - } - - /** - * Returns true if the given argument has a structure. - */ - private boolean hasStructure(IResource input) { - - if (input instanceof IContainer) - return true; - - if (input instanceof IFile) { - IFile file= (IFile) input; - String type= file.getFileExtension(); - if (type != null) { - type= normalizeCase(type); - return "JAR".equals(type) || "ZIP".equals(type); //$NON-NLS-2$ //$NON-NLS-1$ - } - } - - return false; - } - - /** - * Creates a <code>IStructureComparator</code> for the given input. - * Returns <code>null</code> if no <code>IStructureComparator</code> - * can be found for the <code>IResource</code>. - */ - private IStructureComparator getStructure(IResource input) { - - if (input instanceof IContainer) - return new BufferedResourceNode(input); - - if (input instanceof IFile) { - IStructureComparator rn= new BufferedResourceNode(input); - IFile file= (IFile) input; - String type= normalizeCase(file.getFileExtension()); - if ("JAR".equals(type) || "ZIP".equals(type)) //$NON-NLS-2$ //$NON-NLS-1$ - return new ZipFileStructureCreator().getStructure(rn); - return rn; - } - return null; - } - - /** - * Performs a two-way or three-way diff on the current selection. - */ - public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException { - - try { - // fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty - fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - fRightResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - if (fThreeWay && fAncestorResource != null) - fAncestorResource.refreshLocal(IResource.DEPTH_INFINITE, pm); - // end fix - - pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ - - String leftLabel= fLeftResource.getName(); - String rightLabel= fRightResource.getName(); - - String title; - if (fThreeWay) { - String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$ - String ancestorLabel= fAncestorResource.getName(); - title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel}); - } else { - String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$ - title= MessageFormat.format(format, new String[] {leftLabel, rightLabel}); - } - setTitle(title); - - Differencer d= new Differencer() { - protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) { - return new MyDiffNode((IDiffContainer) parent, description, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); - } - }; - - fRoot= d.findDifferences(fThreeWay, pm, null, fAncestor, fLeft, fRight); - return fRoot; - - } catch (CoreException ex) { - throw new InvocationTargetException(ex); - } finally { - pm.done(); - } - } - - public String getToolTipText() { - if (fLeftResource != null && fRightResource != null) { - String leftLabel= fLeftResource.getFullPath().makeRelative().toString(); - String rightLabel= fRightResource.getFullPath().makeRelative().toString(); - if (fThreeWay) { - String format= Utilities.getString("ResourceCompare.threeWay.tooltip"); //$NON-NLS-1$ - String ancestorLabel= fAncestorResource.getFullPath().makeRelative().toString(); - return MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel}); - } else { - String format= Utilities.getString("ResourceCompare.twoWay.tooltip"); //$NON-NLS-1$ - return MessageFormat.format(format, new String[] {leftLabel, rightLabel}); - } - } - // fall back - return super.getToolTipText(); - } - - private String buildLabel(IResource r) { - String n= r.getFullPath().toString(); - if (n.charAt(0) == IPath.SEPARATOR) - return n.substring(1); - return n; - } - - public void saveChanges(IProgressMonitor pm) throws CoreException { - super.saveChanges(pm); - if (fRoot instanceof DiffNode) { - try { - commit(pm, (DiffNode) fRoot); - } finally { - if (fDiffViewer != null) - fDiffViewer.refresh(); - setDirty(false); - } - } - } - - /* - * Recursively walks the diff tree and commits all changes. - */ - private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException { - - if (node instanceof MyDiffNode) - ((MyDiffNode)node).clearDirty(); - - ITypedElement left= node.getLeft(); - if (left instanceof BufferedResourceNode) - ((BufferedResourceNode) left).commit(pm); - - ITypedElement right= node.getRight(); - if (right instanceof BufferedResourceNode) - ((BufferedResourceNode) right).commit(pm); - - IDiffElement[] children= node.getChildren(); - if (children != null) { - for (int i= 0; i < children.length; i++) { - IDiffElement element= children[i]; - if (element instanceof DiffNode) - commit(pm, (DiffNode) element); - } - } - } - - private static String normalizeCase(String s) { - if (NORMALIZE_CASE && s != null) - return s.toUpperCase(); - return s; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java deleted file mode 100644 index 581527039..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowPseudoConflicts.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.util.ResourceBundle; - -import org.eclipse.compare.*; - -/** - * Toggles the <code>ICompareConfiguration.SHOW_PSEUDO_CONFLICTS</code> property of an - * <code>ICompareConfiguration</code>. - */ -public class ShowPseudoConflicts extends ChangePropertyAction { - - public ShowPseudoConflicts(ResourceBundle bundle, CompareConfiguration cc) { - super(bundle, cc, "action.ShowPseudoConflicts.", CompareConfiguration.SHOW_PSEUDO_CONFLICTS); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java deleted file mode 100644 index a28339bfb..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.Document; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.compare.*; -import org.eclipse.compare.structuremergeviewer.ICompareInput; - - -public class SimpleTextViewer extends AbstractViewer { - - private SourceViewer fSourceViewer; - private ICompareInput fInput; - - - SimpleTextViewer(Composite parent) { - fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL + SWT.V_SCROLL); - fSourceViewer.setEditable(false); - } - - public Control getControl() { - return fSourceViewer.getTextWidget(); - } - - public void setInput(Object input) { - if (input instanceof IStreamContentAccessor) { - fSourceViewer.setDocument(new Document(getString(input))); - } else if (input instanceof ICompareInput) { - fInput= (ICompareInput) input; - ITypedElement left= fInput.getLeft(); - fSourceViewer.setDocument(new Document(getString(left))); - } - } - - public Object getInput() { - return fInput; - } - - private String getString(Object input) { - - if (input instanceof IStreamContentAccessor) { - try { - return Utilities.readString((IStreamContentAccessor) input); - } catch (CoreException ex) { - // NeedWork - } - } - return ""; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java deleted file mode 100644 index 739b82f0e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Layout; - -public class TabFolderLayout extends Layout { - - protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) { - if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT) - return new Point(wHint, hHint); - - Control [] children = composite.getChildren (); - int count = children.length; - int maxWidth = 0, maxHeight = 0; - for (int i=0; i<count; i++) { - Control child = children [i]; - Point pt = child.computeSize (SWT.DEFAULT, SWT.DEFAULT, flushCache); - maxWidth = Math.max (maxWidth, pt.x); - maxHeight = Math.max (maxHeight, pt.y); - } - - if (wHint != SWT.DEFAULT) - maxWidth= wHint; - if (hHint != SWT.DEFAULT) - maxHeight= hHint; - - return new Point(maxWidth, maxHeight); - - } - - protected void layout (Composite composite, boolean flushCache) { - Rectangle rect= composite.getClientArea(); - - Control[] children = composite.getChildren(); - for (int i = 0; i < children.length; i++) { - children[i].setBounds(rect); - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java deleted file mode 100644 index 1a5d1d8be..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextMergeViewerCreator.java +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.*; -import org.eclipse.compare.contentmergeviewer.TextMergeViewer; - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextMergeViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new TextMergeViewer(parent, mp); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java deleted file mode 100644 index 66eaba9f8..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextViewerCreator.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.jface.viewers.Viewer; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.IViewerCreator; - - -/** - * A factory object for the <code>TextMergeViewer</code>. - * This indirection is necessary because only objects with a default - * constructor can be created via an extension point - * (this precludes Viewers). - */ -public class TextViewerCreator implements IViewerCreator { - - public Viewer createViewer(Composite parent, CompareConfiguration mp) { - return new SimpleTextViewer(parent); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java deleted file mode 100644 index e8e70af13..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TimeoutContext.java +++ /dev/null @@ -1,385 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.operation.*; -import org.eclipse.jface.resource.JFaceResources; - -import org.eclipse.core.runtime.*; - -/** - * A modal dialog that displays progress during a long running operation. - */ -public class TimeoutContext { - - private static class ModalContextThread extends Thread { - - private boolean fWorking; - private IRunnableWithProgress fRunnable; - private Throwable fThrowable; - private IProgressMonitor fProgressMonitor; - private boolean fContinueEventDispatching= true; - private Display fDisplay; - - private ModalContextThread(IRunnableWithProgress operation, IProgressMonitor monitor) { - super("TimeoutContext"); //$NON-NLS-1$ - fRunnable= operation; - fProgressMonitor= monitor; - } - - synchronized boolean timeout(Display display) { - fDisplay= display; - return fWorking; - } - - public void run() { - try { - fWorking= true; - if (fRunnable != null) - fRunnable.run(fProgressMonitor); - } catch (InvocationTargetException e) { - fThrowable= e; - } catch (InterruptedException e) { - fThrowable= e; - } catch (RuntimeException e) { - fThrowable= e; - } catch (ThreadDeath e) { - // Make sure to propagate ThreadDeath, or threads will never fully terminate - throw e; - } catch (Error e) { - fThrowable= e; - } finally { - fWorking= false; - - if (fDisplay != null) { - // Make sure that all events in the asynchronous event queue - // are dispatched. - fDisplay.syncExec( - new Runnable() { - public void run() { - // do nothing - } - } - ); - - // Stop event dispatching - fContinueEventDispatching= false; - - // Force the event loop to return from sleep () so that - // it stops event dispatching. - fDisplay.asyncExec(null); - } - } - } - - public void block() { - while (fContinueEventDispatching) - if (!fDisplay.readAndDispatch()) - fDisplay.sleep(); - } - } - - static class ProgressMonitorDialog extends org.eclipse.jface.dialogs.Dialog { - - protected ProgressIndicator fProgressIndicator; - protected Label fTaskLabel; - protected Label fSubTaskLabel; - protected Button fCancel; - protected boolean fEnableCancelButton; - private ProgressMonitor fProgressMonitor; - private Cursor fArrowCursor; - private Cursor fWaitCursor; - private Shell fParentShell; - - private ProgressMonitorDialog(Shell parent, boolean cancelable, ProgressMonitor pm) { - super(parent); - fProgressMonitor= pm; - fParentShell= parent; - fEnableCancelButton= cancelable; - this.setBlockOnOpen(false); - setShellStyle(SWT.BORDER | SWT.TITLE | SWT.APPLICATION_MODAL); // no close button - } - - public boolean close() { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setCursor(null); - Shell shell= getShell(); - if (shell != null && !shell.isDisposed()) - shell.setCursor(null); - if (fArrowCursor != null) - fArrowCursor.dispose(); - if (fWaitCursor != null) - fWaitCursor.dispose(); - fArrowCursor= null; - fWaitCursor= null; - return super.close(); - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText(JFaceResources.getString("ProgressMonitorDialog.title")); //$NON-NLS-1$ - if (fWaitCursor == null) - fWaitCursor= new Cursor(shell.getDisplay(),SWT.CURSOR_WAIT); - shell.setCursor(fWaitCursor); - } - - protected void createButtonsForButtonBar(Composite parent) { - // cancel button - fCancel= createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, true); - if(fArrowCursor == null) - fArrowCursor= new Cursor(fCancel.getDisplay(),SWT.CURSOR_ARROW); - fCancel.setCursor(fArrowCursor); - fCancel.addListener(SWT.Selection, - new Listener() { - public void handleEvent(Event e) { - if (fCancel != null && !fCancel.isDisposed()) - fCancel.setEnabled(false); - fProgressMonitor.setCanceled(true); - } - } - ); - fCancel.setEnabled(fEnableCancelButton); - } - - protected Control createDialogArea(Composite parent) { - - Composite c= (Composite)super.createDialogArea(parent); - ((GridLayout)c.getLayout()).numColumns= 2; - - // icon - Label iconLabel= new Label(c, SWT.LEFT); - GridData gd= new GridData(); - iconLabel.setLayoutData(gd); - iconLabel.setFont(parent.getFont()); - Image i= JFaceResources.getImageRegistry().get(org.eclipse.jface.dialogs.Dialog.DLG_IMG_INFO); - if (i != null) - iconLabel.setImage(i); - else - iconLabel.setText(JFaceResources.getString("Image_not_found")); //$NON-NLS-1$ - - // label on right hand side of icon - fTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - fTaskLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fTaskLabel.setFont(parent.getFont()); - - // progress indicator - fProgressIndicator= new ProgressIndicator(c); - gd= new GridData(); - gd.heightHint= 15; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.horizontalSpan= 2; - fProgressIndicator.setLayoutData(gd); - - // label showing current task - fSubTaskLabel= new Label(c, SWT.LEFT | SWT.WRAP); - gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 35; - gd.horizontalSpan= 2; - fSubTaskLabel.setLayoutData(gd); - fSubTaskLabel.setFont(parent.getFont()); - - // update with values fProgressMonitor - String s= fProgressMonitor.fTask; - if (s == null) - s= ""; //$NON-NLS-1$ - fTaskLabel.setText(s); - - if (fProgressMonitor.fMaxWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(fProgressMonitor.fMaxWork); - - if (fProgressMonitor.fSubTask != null) - fSubTaskLabel.setText(fProgressMonitor.fSubTask); - fProgressIndicator.worked(fProgressMonitor.fWorked); - - fProgressMonitor.activate(this); - applyDialogFont(c); - return c; - } - - void beginTask(final String name, final int totalWork) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - fTaskLabel.setText(name); - - if (fProgressIndicator != null && fProgressIndicator.isDisposed()) { - if (totalWork == IProgressMonitor.UNKNOWN) - fProgressIndicator.beginAnimatedTask(); - else - fProgressIndicator.beginTask(totalWork); - } - } - } - ); - } - - void setTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fTaskLabel != null && fTaskLabel.isDisposed()) - fTaskLabel.setText(name); - } - } - ); - } - - void setSubTaskName(final String name) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - String n= (name == null) ? "" : name; //$NON-NLS-1$ - if (fSubTaskLabel != null && !fSubTaskLabel.isDisposed()) - fSubTaskLabel.setText(n); - } - } - ); - } - - void done() { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) { - fProgressIndicator.sendRemainingWork(); - fProgressIndicator.done(); - } - } - } - ); - } - - void worked(final double work) { - fParentShell.getDisplay().syncExec( - new Runnable() { - public void run() { - if (fProgressIndicator != null && !fProgressIndicator.isDisposed()) - fProgressIndicator.worked(work); - } - } - ); - } - - protected Point getInitialSize() { - return getShell().computeSize(450, SWT.DEFAULT); - } - } - - private static class ProgressMonitor implements IProgressMonitor { - - private int fMaxWork; - private String fTask; - private String fSubTask; - private int fWorked; - private ProgressMonitorDialog fProgressMonitorDialog; - private boolean fIsCanceled; - - public void beginTask(String name, int totalWork) { - - fTask= name; - fMaxWork= totalWork; - fWorked= 0; - - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.beginTask(name, totalWork); - } - - void activate(ProgressMonitorDialog dialog) { - fProgressMonitorDialog= dialog; - } - - public void done() { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.done(); - } - - public void setTaskName(String name) { - fTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setTaskName(name); - } - - public boolean isCanceled() { - return fIsCanceled; - } - - public void setCanceled(boolean b) { - fIsCanceled= b; - } - - public void subTask(String name) { - fSubTask= name; - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.setSubTaskName(name); - } - - public void worked(int work) { - if (fProgressMonitorDialog != null) - internalWorked(work); - else - fWorked+= work; - } - - public void internalWorked(double work) { - if (fProgressMonitorDialog != null) - fProgressMonitorDialog.worked(work); - } - } - - public static void run(boolean cancelable, int timeout, Shell parent, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { - - Display display= parent.getDisplay(); - - ProgressMonitor pm= new ProgressMonitor(); - - ModalContextThread t= new ModalContextThread(runnable, pm); - t.start(); // start the long running operation - - // wait until long operations terminates or timeout - try { - t.join(timeout); - } catch (InterruptedException e) { - // silently ignored - } - - if (t.timeout(display)) { // timeout - ProgressMonitorDialog dialog= new ProgressMonitorDialog(parent, cancelable, pm); - dialog.open(); - t.block(); - dialog.close(); - } - - Throwable throwable= t.fThrowable; - if (throwable != null) { - if (throwable instanceof InvocationTargetException) { - throw (InvocationTargetException) throwable; - } else if (throwable instanceof InterruptedException) { - throw (InterruptedException) throwable; - } else if (throwable instanceof OperationCanceledException) { - throw new InterruptedException(throwable.getMessage()); - } else { - throw new InvocationTargetException(throwable); - } - } - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java deleted file mode 100644 index e1aca48c9..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TokenComparator.java +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.compare.rangedifferencer.IRangeComparator; -import org.eclipse.compare.contentmergeviewer.ITokenComparator; - -/** - * Implements the <code>ITokenComparator</code> interface for words (or tokens) - * in a string. - * A <code>TokenComparator</code> is used as the input for the <code>RangeDifferencer</code> - * engine to perform a token oriented compare on strings. - */ -public class TokenComparator implements ITokenComparator { - - private boolean fShouldEscape= true; - private String fText; - private int fCount; - private int[] fStarts; - private int[] fLengths; - - /** - * Creates a <code>TokenComparator</code> for the given string. - * - * @param string the string that is split into token - */ - public TokenComparator(String text) { - - Assert.isNotNull(text); - - fText= text; - - int length= fText.length(); - fStarts= new int[length]; // pessimistic assumption! - fLengths= new int[length]; - fCount= 0; - - char lastCategory= 0; // 0: no category - for (int i= 0; i < length; i++) { - char c= fText.charAt(i); - - char category= '?'; // unspecified category - if (Character.isWhitespace(c)) - category= ' '; // white space category - else if (Character.isDigit(c)) - category= '0'; // digits - else if (Character.isLetter(c)) - category= 'a'; // letters - - if (category != lastCategory) { - // start a new token - fStarts[fCount++]= i; - lastCategory= category; - } - fLengths[fCount-1]++; - } - } - - /** - * Creates a <code>TokenComparator</code> for the given string. - * - * @param string the string that is split into token - * @param shouldEscape - */ - public TokenComparator(String s, boolean shouldEscape) { - this(s); - fShouldEscape= shouldEscape; - } - - /** - * Returns the number of token in the string. - * - * @return number of token in the string - */ - public int getRangeCount() { - return fCount; - } - - /* (non Javadoc) - * see ITokenComparator.getTokenStart - */ - public int getTokenStart(int index) { - if (index < fCount) - return fStarts[index]; - return fText.length(); - } - - /* (non Javadoc) - * see ITokenComparator.getTokenLength - */ - public int getTokenLength(int index) { - if (index < fCount) - return fLengths[index]; - return 0; - } - - /** - * Returns <code>true</code> if a token given by the first index - * matches a token specified by the other <code>IRangeComparator</code> and index. - * - * @param thisIndex the number of the token within this range comparator - * @param other the range comparator to compare this with - * @param otherIndex the number of the token within the other comparator - * @return <code>true</code> if the token are equal - */ - public boolean rangesEqual(int thisIndex, IRangeComparator other, int otherIndex) { - if (other != null && getClass() == other.getClass()) { - TokenComparator tc= (TokenComparator) other; - int thisLen= getTokenLength(thisIndex); - int otherLen= tc.getTokenLength(otherIndex); - if (thisLen == otherLen) - return fText.regionMatches(false, getTokenStart(thisIndex), tc.fText, tc.getTokenStart(otherIndex), thisLen); - } - return false; - } - - /** - * Aborts the comparison if the number of tokens is too large. - * - * @return <code>true</code> to abort a token comparison - */ - public boolean skipRangeComparison(int length, int max, IRangeComparator other) { - - if (!fShouldEscape) - return false; - - if (getRangeCount() < 50 || other.getRangeCount() < 50) - return false; - - if (max < 100) - return false; - - if (length < 100) - return false; - - if (max > 800) - return true; - - if (length < max / 4) - return false; - - return true; - } - -// public static void main(String args[]) { -// //String in= "private static boolean isWhitespace(char c) {"; -// //String in= "for (int j= 0; j < l-1; j++) {"; -// String in= "for do i= 123; i++"; -// TokenComparator tc= new TokenComparator(in, false); -// -// System.out.println("n: " + tc.getRangeCount()); -// System.out.println(in); -// -// int p= 0; -// for (int i= 0; i < tc.getRangeCount(); i++) { -// int l= tc.getTokenLength(i); -// System.out.print("<"); -// -// for (int j= 0; j < l-1; j++) -// System.out.print(" "); -// } -// System.out.println(); -// -// //System.out.println("extract: <" + tc.extract(16, 1) + ">"); -// } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java deleted file mode 100644 index 4f22d265d..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Utilities.java +++ /dev/null @@ -1,593 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import java.io.*; -import java.text.MessageFormat; -import java.util.*; -import java.util.List; - -import org.eclipse.swt.widgets.*; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.*; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.dialogs.ErrorDialog; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.Status; - -import org.eclipse.ui.*; - -import org.eclipse.compare.CompareConfiguration; -import org.eclipse.compare.IStreamContentAccessor; -import org.eclipse.compare.IStreamContentAccessorExtension2; - -/** - * Convenience and utility methods. - */ -public class Utilities { - - public static void registerAction(IKeyBindingService kbs, IAction a, String id) { - if (kbs != null) { - a.setActionDefinitionId(id); - kbs.registerAction(a); - } - } - - public static IWorkbenchPartSite findSite(Control c) { - while (c != null && !c.isDisposed()) { - Object data= c.getData(); - if (data instanceof IWorkbenchPart) - return ((IWorkbenchPart)data).getSite(); - c= c.getParent(); - } - return null; - } - - public static IActionBars findActionBars(Control c) { - while (c != null && !c.isDisposed()) { - Object data= c.getData(); - if (data instanceof CompareEditor) - return ((CompareEditor)data).getActionBars(); - - // PR 1GDVZV7: ITPVCM:WIN98 - CTRL + C does not work in Java source compare - if (data instanceof IViewPart) - return ((IViewPart)data).getViewSite().getActionBars(); - // end PR 1GDVZV7 - - c= c.getParent(); - } - return null; - } - - public static void setEnableComposite(Composite composite, boolean enable) { - Control[] children= composite.getChildren(); - for (int i= 0; i < children.length; i++) - children[i].setEnabled(enable); - } - - public static boolean getBoolean(CompareConfiguration cc, String key, boolean dflt) { - if (cc != null) { - Object value= cc.getProperty(key); - if (value instanceof Boolean) - return ((Boolean) value).booleanValue(); - } - return dflt; - } - - public static void firePropertyChange(ListenerList ll, Object source, String property, Object old, Object newValue) { - if (ll != null) { - PropertyChangeEvent event= null; - Object[] listeners= ll.getListeners(); - for (int i= 0; i < listeners.length; i++) { - IPropertyChangeListener l= (IPropertyChangeListener) listeners[i]; - if (event == null) - event= new PropertyChangeEvent(source, property, old, newValue); - l.propertyChange(event); - } - } - } - - public static boolean okToUse(Widget widget) { - return widget != null && !widget.isDisposed(); - } - - private static ArrayList internalGetResources(ISelection selection, Class type) { - - ArrayList tmp= new ArrayList(); - - if (selection instanceof IStructuredSelection) { - - Object[] s= ((IStructuredSelection)selection).toArray(); - - for (int i= 0; i < s.length; i++) { - - IResource resource= null; - - Object o= s[i]; - if (type.isInstance(o)) { - resource= (IResource) o; - - } else if (o instanceof IAdaptable) { - IAdaptable a= (IAdaptable) o; - Object adapter= a.getAdapter(IResource.class); - if (type.isInstance(adapter)) - resource= (IResource) adapter; - } - - if (resource != null && resource.isAccessible()) - tmp.add(resource); - } - } - - return tmp; - } - - /** - * Convenience method: extract all accessible <code>IResources</code> from given selection. - * Never returns null. - */ - public static IResource[] getResources(ISelection selection) { - ArrayList tmp= internalGetResources(selection, IResource.class); - return (IResource[]) tmp.toArray(new IResource[tmp.size()]); - } - - /** - * Convenience method: extract all accessible <code>IFiles</code> from given selection. - * Never returns null. - */ - public static IFile[] getFiles(ISelection selection) { - ArrayList tmp= internalGetResources(selection, IFile.class); - return (IFile[]) tmp.toArray(new IFile[tmp.size()]); - } - - public static byte[] readBytes(InputStream in) { - ByteArrayOutputStream bos= new ByteArrayOutputStream(); - try { - while (true) { - int c= in.read(); - if (c == -1) - break; - bos.write(c); - } - - } catch (IOException ex) { - return null; - - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException x) { - // silently ignored - } - } - try { - bos.close(); - } catch (IOException x) { - // silently ignored - } - } - - return bos.toByteArray(); - } - - public static String getIconPath(Display display) { - return "icons/full/"; //$NON-NLS-1$ - } - - /** - * Initialize the given Action from a ResourceBundle. - */ - public static void initAction(IAction a, ResourceBundle bundle, String prefix) { - - String labelKey= "label"; //$NON-NLS-1$ - String tooltipKey= "tooltip"; //$NON-NLS-1$ - String imageKey= "image"; //$NON-NLS-1$ - String descriptionKey= "description"; //$NON-NLS-1$ - - if (prefix != null && prefix.length() > 0) { - labelKey= prefix + labelKey; - tooltipKey= prefix + tooltipKey; - imageKey= prefix + imageKey; - descriptionKey= prefix + descriptionKey; - } - - a.setText(getString(bundle, labelKey, labelKey)); - a.setToolTipText(getString(bundle, tooltipKey, null)); - a.setDescription(getString(bundle, descriptionKey, null)); - - String relPath= getString(bundle, imageKey, null); - if (relPath != null && relPath.trim().length() > 0) { - - String cPath; - String dPath; - String ePath; - - if (relPath.indexOf("/") >= 0) { //$NON-NLS-1$ - String path= relPath.substring(1); - cPath= 'c' + path; - dPath= 'd' + path; - ePath= 'e' + path; - } else { - cPath= "clcl16/" + relPath; //$NON-NLS-1$ - dPath= "dlcl16/" + relPath; //$NON-NLS-1$ - ePath= "elcl16/" + relPath; //$NON-NLS-1$ - } - - ImageDescriptor id= CompareUIPlugin.getImageDescriptor(dPath); // we set the disabled image first (see PR 1GDDE87) - if (id != null) - a.setDisabledImageDescriptor(id); - id= CompareUIPlugin.getImageDescriptor(cPath); - if (id != null) - a.setHoverImageDescriptor(id); - id= CompareUIPlugin.getImageDescriptor(ePath); - if (id != null) - a.setImageDescriptor(id); - } - } - - public static void initToggleAction(IAction a, ResourceBundle bundle, String prefix, boolean checked) { - - String tooltip= null; - if (checked) - tooltip= getString(bundle, prefix + "tooltip.checked", null); //$NON-NLS-1$ - else - tooltip= getString(bundle, prefix + "tooltip.unchecked", null); //$NON-NLS-1$ - if (tooltip == null) - tooltip= getString(bundle, prefix + "tooltip", null); //$NON-NLS-1$ - - if (tooltip != null) - a.setToolTipText(tooltip); - - String description= null; - if (checked) - description= getString(bundle, prefix + "description.checked", null); //$NON-NLS-1$ - else - description= getString(bundle, prefix + "description.unchecked", null); //$NON-NLS-1$ - if (description == null) - description= getString(bundle, prefix + "description", null); //$NON-NLS-1$ - - if (description != null) - a.setDescription(description); - - } - - public static String getString(ResourceBundle bundle, String key, String dfltValue) { - - if (bundle != null) { - try { - return bundle.getString(key); - } catch (MissingResourceException x) { - // NeedWork - } - } - return dfltValue; - } - - public static String getFormattedString(ResourceBundle bundle, String key, String arg) { - - if (bundle != null) { - try { - return MessageFormat.format(bundle.getString(key), new String[] { arg }); - } catch (MissingResourceException x) { - // NeedWork - } - } - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - - public static String getString(String key) { - try { - return CompareUIPlugin.getResourceBundle().getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } - - public static String getFormattedString(String key, String arg) { - try{ - return MessageFormat.format(CompareUIPlugin.getResourceBundle().getString(key), new String[] { arg }); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } - - public static String getString(ResourceBundle bundle, String key) { - return getString(bundle, key, key); - } - - public static int getInteger(ResourceBundle bundle, String key, int dfltValue) { - - if (bundle != null) { - try { - String s= bundle.getString(key); - if (s != null) - return Integer.parseInt(s); - } catch (NumberFormatException x) { - // NeedWork - } catch (MissingResourceException x) { - // NeedWork - } - } - return dfltValue; - } - - /** - * Answers <code>true</code> if the given selection contains resources that don't - * have overlapping paths and <code>false</code> otherwise. - */ - /* - public static boolean isSelectionNonOverlapping() throws TeamException { - IResource[] resources = getSelectedResources(); - // allow operation for non-overlapping resource selections - if(resources.length>0) { - List validPaths = new ArrayList(2); - for (int i = 0; i < resources.length; i++) { - IResource resource = resources[i]; - - // only allow cvs resources to be selected - if(RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) == null) { - return false; - } - - // check if this resource overlaps other selections - IPath resourceFullPath = resource.getFullPath(); - if(!validPaths.isEmpty()) { - for (Iterator it = validPaths.iterator(); it.hasNext();) { - IPath path = (IPath) it.next(); - if(path.isPrefixOf(resourceFullPath) || - resourceFullPath.isPrefixOf(path)) { - return false; - } - } - } - validPaths.add(resourceFullPath); - - // ensure that resources are managed - ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource); - if(cvsResource.isFolder()) { - if( ! ((ICVSFolder)cvsResource).isCVSFolder()) return false; - } else { - if( ! cvsResource.isManaged()) return false; - } - } - return true; - } - return false; - } - */ - - /* validate edit utilities */ - - /** - * Status constant indicating that an validateEdit call has changed the - * content of a file on disk. - */ - private static final int VALIDATE_EDIT_PROBLEM= 10004; - - - /** - * Makes the given resources committable. Committable means that all - * resources are writeable and that the content of the resources hasn't - * changed by calling <code>validateEdit</code> for a given file on - * <tt>IWorkspace</tt>. - * - * @param resources the resources to be checked - * @param shell the Shell passed to <code>validateEdit</code> as a context - * @return returns <code>true</code> if all resources are committable, <code>false</code> otherwise - * - * @see org.eclipse.core.resources.IWorkspace#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object) - */ - public static boolean validateResource(IResource resource, Shell shell, String title) { - return validateResources(new IResource[] { resource }, shell, title); - } - - /** - * Makes the given resources committable. Committable means that all - * resources are writeable and that the content of the resources hasn't - * changed by calling <code>validateEdit</code> for a given file on - * <tt>IWorkspace</tt>. - * - * @param resources the resources to be checked - * @param shell the Shell passed to <code>validateEdit</code> as a context - * @return returns <code>true</code> if all resources are committable, <code>false</code> otherwise - * - * @see org.eclipse.core.resources.IWorkspace#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object) - */ - public static boolean validateResources(List resources, Shell shell, String title) { - IResource r[]= (IResource[]) resources.toArray(new IResource[resources.size()]); - return validateResources(r, shell, title); - } - - /** - * Makes the given resources committable. Committable means that all - * resources are writeable and that the content of the resources hasn't - * changed by calling <code>validateEdit</code> for a given file on - * <tt>IWorkspace</tt>. - * - * @param resources the resources to be checked - * @param shell the Shell passed to <code>validateEdit</code> as a context - * @return returns <code>true</code> if all resources are committable, <code>false</code> otherwise - * - * @see org.eclipse.core.resources.IWorkspace#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object) - */ - public static boolean validateResources(IResource[] resources, Shell shell, String title) { - - // get all readonly files - List readOnlyFiles= getReadonlyFiles(resources); - if (readOnlyFiles.size() == 0) - return true; - - // get timestamps of readonly files before validateEdit - Map oldTimeStamps= createModificationStampMap(readOnlyFiles); - - IFile[] files= (IFile[]) readOnlyFiles.toArray(new IFile[readOnlyFiles.size()]); - IStatus status= ResourcesPlugin.getWorkspace().validateEdit(files, shell); - if (! status.isOK()) { - String message= getString("ValidateEdit.error.unable_to_perform"); //$NON-NLS-1$ - ErrorDialog.openError(shell, title, message, status); //$NON-NLS-1$ - return false; - } - - IStatus modified= null; - Map newTimeStamps= createModificationStampMap(readOnlyFiles); - for (Iterator iter= oldTimeStamps.keySet().iterator(); iter.hasNext();) { - IFile file= (IFile) iter.next(); - if (file.isReadOnly()) { - IStatus entry= new Status(IStatus.ERROR, - CompareUIPlugin.getPluginId(), - VALIDATE_EDIT_PROBLEM, - getFormattedString("ValidateEdit.error.stillReadonly", file.getFullPath().toString()), //$NON-NLS-1$ - null); - modified= addStatus(modified, entry); - } else if (! oldTimeStamps.get(file).equals(newTimeStamps.get(file))) { - IStatus entry= new Status(IStatus.ERROR, - CompareUIPlugin.getPluginId(), - VALIDATE_EDIT_PROBLEM, - getFormattedString("ValidateEdit.error.fileModified", file.getFullPath().toString()), //$NON-NLS-1$ - null); - modified= addStatus(modified, entry); - } - } - if (modified != null) { - String message= getString("ValidateEdit.error.unable_to_perform"); //$NON-NLS-1$ - ErrorDialog.openError(shell, title, message, modified); - return false; - } - return true; - } - - private static List getReadonlyFiles(IResource[] resources) { - List readOnlyFiles= new ArrayList(); - for (int i= 0; i < resources.length; i++) { - IResource resource= resources[i]; - if (resource.getType() == IResource.FILE && resource.isReadOnly()) - readOnlyFiles.add(resource); - } - return readOnlyFiles; - } - - private static Map createModificationStampMap(List files) { - Map map= new HashMap(); - for (Iterator iter= files.iterator(); iter.hasNext(); ) { - IFile file= (IFile)iter.next(); - map.put(file, new Long(file.getModificationStamp())); - } - return map; - } - - private static IStatus addStatus(IStatus status, IStatus entry) { - - if (status == null) - return entry; - - if (status.isMultiStatus()) { - ((MultiStatus)status).add(entry); - return status; - } - - MultiStatus result= new MultiStatus(CompareUIPlugin.getPluginId(), - VALIDATE_EDIT_PROBLEM, - getString("ValidateEdit.error.unable_to_perform"), null); //$NON-NLS-1$ - result.add(status); - result.add(entry); - return result; - } - - // encoding - - /** - * Returns null if an error occurred. - */ - public static String readString(InputStream is, String encoding) { - if (is == null) - return null; - BufferedReader reader= null; - try { - StringBuffer buffer= new StringBuffer(); - char[] part= new char[2048]; - int read= 0; - reader= new BufferedReader(new InputStreamReader(is, encoding)); - - while ((read= reader.read(part)) != -1) - buffer.append(part, 0, read); - - return buffer.toString(); - - } catch (IOException ex) { - // NeedWork - } finally { - if (reader != null) { - try { - reader.close(); - } catch (IOException ex) { - // silently ignored - } - } - } - return null; - } - - public static String getCharset(IResource resource) { - if (resource != null) { - /* - try { - return resource.getCharset(); - } catch (CoreException ex) { - } - */ - } - return ResourcesPlugin.getEncoding(); - } - - public static byte[] getBytes(String s, String encoding) { - byte[] bytes= null; - if (s != null) { - try { - bytes= s.getBytes(encoding); //$NON-NLS-1$ - } catch (UnsupportedEncodingException e) { - bytes= s.getBytes(); - } - } - return bytes; - } - - public static String guessCharset(String path) { - //System.err.println("Utilities.guessCharset: " + path); - int dot= path.lastIndexOf('.'); - if (dot >= 0) { - String extension= path.substring(dot); - if (extension.equalsIgnoreCase(".xml")) //$NON-NLS-1$ - return "UTF-8"; //$NON-NLS-1$ - } - return ResourcesPlugin.getEncoding(); - } - - public static String readString(IStreamContentAccessor sa) throws CoreException { - InputStream is= sa.getContents(); - String encoding= null; - if (sa instanceof IStreamContentAccessorExtension2) - encoding= ((IStreamContentAccessorExtension2)sa).getCharset(); - if (encoding == null) - encoding= ResourcesPlugin.getEncoding(); - return Utilities.readString(is, encoding); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java deleted file mode 100644 index 3d5dbcc6f..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - -import org.eclipse.swt.widgets.Composite; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.compare.*; - -import org.eclipse.jface.viewers.Viewer; - -/** - * Creates <code>Viewer</code>s from an <code>IConfigurationElement</code>. - */ -public class ViewerDescriptor implements IViewerDescriptor { - - private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$ - private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$ - - private IConfigurationElement fConfiguration; - private IViewerCreator fViewerCreator; - private Class fViewerClass; - - public ViewerDescriptor(IConfigurationElement config) { - fConfiguration= config; - } - - public Viewer createViewer(Viewer currentViewer, Composite parent, CompareConfiguration mp) { - - if (currentViewer != null && currentViewer.getClass() == fViewerClass) { - //System.out.println("reused viewer: " + currentViewer.getClass().getName()); - return currentViewer; - } - - if (fViewerCreator == null) { - try { - fViewerCreator= (IViewerCreator) fConfiguration.createExecutableExtension(CLASS_ATTRIBUTE); - } catch (CoreException e) { - // NeedWork - } - } - - if (fViewerCreator != null) { - Viewer viewer= fViewerCreator.createViewer(parent, mp); - if (viewer != null) - fViewerClass= viewer.getClass(); - return viewer; - } - - return null; - } - - public String getExtension() { - return fConfiguration.getAttribute(EXTENSIONS_ATTRIBUTE); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java deleted file mode 100644 index 27e580c5e..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerSwitchingCancelled.java +++ /dev/null @@ -1,17 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal; - - -public class ViewerSwitchingCancelled extends Error { - -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java deleted file mode 100644 index 674af0adb..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/CompareWithPatchAction.java +++ /dev/null @@ -1,154 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; -import java.util.Arrays; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.dialogs.ProgressMonitorDialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.util.Assert; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.window.Window; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.ui.IEditorPart; - -import org.eclipse.compare.internal.*; - - -public class CompareWithPatchAction extends BaseCompareAction { - - static class PatchWizardDialog extends WizardDialog { - - PatchWizardDialog(Shell parent, IWizard wizard) { - super(parent, wizard); - - setShellStyle(getShellStyle() | SWT.RESIZE); - setMinimumPageSize(700, 500); - } - } - - protected boolean isEnabled(ISelection selection) { - return Utilities.getResources(selection).length == 1; - } - - /* (non-Javadoc) - * @see org.eclipse.compare.internal.BaseCompareAction#run(org.eclipse.jface.viewers.ISelection) - */ - protected void run(ISelection selection) { - PatchWizard wizard= new PatchWizard(selection); - - if (areAllEditorsSaved()) { - PatchWizardDialog dialog= new PatchWizardDialog(CompareUIPlugin.getShell(), wizard); - dialog.open(); - } - } - - private boolean areAllEditorsSaved(){ - if (CompareUIPlugin.getDirtyEditors().length == 0) - return true; - if (! saveAllDirtyEditors()) - return false; - Shell shell= CompareUIPlugin.getShell(); - try { - // Save isn't cancelable. - IWorkspace workspace= ResourcesPlugin.getWorkspace(); - IWorkspaceDescription description= workspace.getDescription(); - boolean autoBuild= description.isAutoBuilding(); - description.setAutoBuilding(false); - workspace.setDescription(description); - try { - new ProgressMonitorDialog(shell).run(false, false, createRunnable()); - } finally { - description.setAutoBuilding(autoBuild); - workspace.setDescription(description); - } - return true; - } catch (InvocationTargetException e) { - ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } catch (CoreException e) { - ExceptionHandler.handle(e, shell, PatchMessages.getString("PatchAction.ExceptionTitle"), PatchMessages.getString("Exception")); //$NON-NLS-1$ //$NON-NLS-2$ - return false; - } catch (InterruptedException e) { - Assert.isTrue(false); // Can't happen. Operation isn't cancelable. - return false; - } - } - - private IRunnableWithProgress createRunnable() { - return new IRunnableWithProgress() { - public void run(IProgressMonitor pm) { - IEditorPart[] editorsToSave= CompareUIPlugin.getDirtyEditors(); - pm.beginTask(PatchMessages.getString("PatchAction.SavingDirtyEditorsTask"), editorsToSave.length); //$NON-NLS-1$ - for (int i= 0; i < editorsToSave.length; i++) { - editorsToSave[i].doSave(new SubProgressMonitor(pm, 1)); - pm.worked(1); - } - pm.done(); - } - }; - } - - private boolean saveAllDirtyEditors() { - if (ComparePreferencePage.getSaveAllEditors()) //must save everything - return true; - ListDialog dialog= new ListDialog(CompareUIPlugin.getShell()) { - protected Control createDialogArea(Composite parent) { - Composite result= (Composite) super.createDialogArea(parent); - final Button check= new Button(result, SWT.CHECK); - check.setText(PatchMessages.getString("PatchAction.AlwaysSaveQuestion")); //$NON-NLS-1$ - check.setSelection(ComparePreferencePage.getSaveAllEditors()); - check.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - ComparePreferencePage.setSaveAllEditors(check.getSelection()); - } - } - ); - applyDialogFont(result); - return result; - } - }; - dialog.setTitle(PatchMessages.getString("PatchAction.SaveAllQuestion")); //$NON-NLS-1$ - dialog.setAddCancelButton(true); - dialog.setLabelProvider(createDialogLabelProvider()); - dialog.setMessage(PatchMessages.getString("PatchAction.SaveAllDescription")); //$NON-NLS-1$ - dialog.setContentProvider(new ListContentProvider()); - dialog.setInput(Arrays.asList(CompareUIPlugin.getDirtyEditors())); - return dialog.open() == Window.OK; - } - - private ILabelProvider createDialogLabelProvider() { - return new LabelProvider() { - public Image getImage(Object element) { - return ((IEditorPart) element).getTitleImage(); - } - public String getText(Object element) { - return ((IEditorPart) element).getTitle(); - } - }; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java deleted file mode 100644 index 2278296c0..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Diff.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.*; - -import org.eclipse.core.runtime.IPath; - -import org.eclipse.compare.structuremergeviewer.Differencer; - - -/* package */ class Diff { - - IPath fOldPath, fNewPath; - long fOldDate, fNewDate; // if 0: no file - List fHunks= new ArrayList(); - boolean fMatches= false; - private boolean fIsEnabled2= true; - String fRejected; - - - /* package */ Diff(IPath oldPath, long oldDate, IPath newPath, long newDate) { - fOldPath= oldPath; - fOldDate= oldPath == null ? 0 : oldDate; - fNewPath= newPath; - fNewDate= newPath == null ? 0 : newDate; - } - - boolean isEnabled() { - return fIsEnabled2; - } - - void setEnabled(boolean b) { - fIsEnabled2= b; - } - - void reverse() { - IPath tp= fOldPath; - fOldPath= fNewPath; - fNewPath= tp; - - long t= fOldDate; - fOldDate= fNewDate; - fNewDate= t; - - Iterator iter= fHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - hunk.reverse(); - } - } - - Hunk[] getHunks() { - return (Hunk[]) fHunks.toArray(new Hunk[fHunks.size()]); - } - - IPath getPath() { - if (fOldPath != null) - return fOldPath; - return fNewPath; - } - - void finish() { - if (fHunks.size() == 1) { - Hunk h= (Hunk) fHunks.get(0); - if (h.fNewLength == 0) { - fNewDate= 0; - fNewPath= fOldPath; - } - } - } - - /* package */ void add(Hunk hunk) { - fHunks.add(hunk); - } - - /* package */ int getType() { - if (fOldDate == 0) - return Differencer.ADDITION; - if (fNewDate == 0) - return Differencer.DELETION; - return Differencer.CHANGE; - } - - /* package */ String getDescription(int strip) { - IPath path= fOldPath; - if (fOldDate == 0) - path= fNewPath; - if (strip > 0 && strip < path.segmentCount()) - path= path.removeFirstSegments(strip); - return path.toOSString(); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java deleted file mode 100644 index 4bb105b98..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Hunk.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.List; - -/** - * A Hunk describes a range of changed lines and some context lines. - */ -/* package */ class Hunk { - - Diff fParent; - int fOldStart, fOldLength; - int fNewStart, fNewLength; - String[] fLines; - boolean fMatches= false; - private boolean fIsEnabled= true; - - - /* package */ Hunk(Diff parent, int[] oldRange, int[] newRange, List lines) { - - fParent= parent; - if (fParent != null) - fParent.add(this); - - if (oldRange[0] > 0) - fOldStart= oldRange[0]-1; // line number start at 0! - else - fOldStart= 0; - fOldLength= oldRange[1]; - if (newRange[0] > 0) - fNewStart= newRange[0]-1; // line number start at 0! - else - fNewStart= 0; - fNewLength= newRange[1]; - - fLines= (String[]) lines.toArray(new String[lines.size()]); - } - - boolean isEnabled() { - return fIsEnabled; - } - - void setEnabled(boolean enable) { - fIsEnabled= enable; - } - - void reverse() { - int t= fOldStart; - fOldStart= fNewStart; - fNewStart= t; - - t= fOldLength; - fOldLength= fNewLength; - fNewLength= t; - - for (int i= 0; i < fLines.length; i++) { - String line= fLines[i]; - char c= line.charAt(0); - switch (c) { - case '+': - fLines[i]= '-' + line.substring(1); - break; - case '-': - fLines[i]= '+' + line.substring(1); - break; - default: - break; - } - } - } - - /** - * Returns the contents of this hunk. - * Each line starts with a control character. Their meaning is as follows: - * <ul> - * <li> - * '+': add the line - * <li> - * '-': delete the line - * <li> - * ' ': no change, context line - * </ul> - */ - String getContent() { - StringBuffer sb= new StringBuffer(); - for (int i= 0; i < fLines.length; i++) { - String line= fLines[i]; - sb.append(line.substring(0, Patcher.length(line))); - sb.append('\n'); - } - return sb.toString(); - } - - /** - * Returns a descriptive String for this hunk. - * It is in the form old_start,old_length -> new_start,new_length. - */ - String getDescription() { - StringBuffer sb= new StringBuffer(); - sb.append(Integer.toString(fOldStart)); - sb.append(','); - sb.append(Integer.toString(fOldLength)); - sb.append(" -> "); //$NON-NLS-1$ - sb.append(Integer.toString(fNewStart)); - sb.append(','); - sb.append(Integer.toString(fNewLength)); - return sb.toString(); - } - - String getRejectedDescription() { - StringBuffer sb= new StringBuffer(); - sb.append("@@ -"); //$NON-NLS-1$ - sb.append(Integer.toString(fOldStart)); - sb.append(','); - sb.append(Integer.toString(fOldLength)); - sb.append(" +"); //$NON-NLS-1$ - sb.append(Integer.toString(fNewStart)); - sb.append(','); - sb.append(Integer.toString(fNewLength)); - sb.append(" @@"); //$NON-NLS-1$ - return sb.toString(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java deleted file mode 100644 index 6ff163178..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java +++ /dev/null @@ -1,524 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.text.MessageFormat; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.dnd.*; -import org.eclipse.swt.events.*; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; - -import org.eclipse.jface.dialogs.*; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.*; - -import org.eclipse.ui.help.*; -import org.eclipse.ui.model.*; - -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.Utilities; -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - - -/* package */ class InputPatchPage extends WizardPage { - - // constants - protected static final int SIZING_TEXT_FIELD_WIDTH= 250; - protected static final int COMBO_HISTORY_LENGTH= 5; - - // dialog store id constants - private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$ - private final static String STORE_PATCH_FILES_ID= PAGE_NAME + ".PATCH_FILES"; //$NON-NLS-1$ - private final static String STORE_USE_CLIPBOARD_ID= PAGE_NAME + ".USE_CLIPBOARD"; //$NON-NLS-1$ - - private boolean fShowError= false; - - // SWT widgets - private Button fUseClipboardButton; - private Combo fPatchFileNameField; - private Button fPatchFileBrowseButton; - private Button fUsePatchFileButton; - private Group fPatchFileGroup; - private CheckboxTreeViewer fPatchTargets; - private PatchWizard fPatchWizard; - - - InputPatchPage(PatchWizard pw) { - super("InputPatchPage", PatchMessages.getString("InputPatchPage.title"), null); //$NON-NLS-1$ //$NON-NLS-2$ - fPatchWizard= pw; - setMessage(PatchMessages.getString("InputPatchPage.message")); //$NON-NLS-1$ - } - - /** - * Get a path from the supplied text widget. - * @return org.eclipse.core.runtime.IPath - */ - protected IPath getPathFromText(Text textField) { - return (new Path(textField.getText())).makeAbsolute(); - } - - /* package */ String getPatchName() { - if (getUseClipboard()) - return PatchMessages.getString("InputPatchPage.Clipboard"); //$NON-NLS-1$ - return getPatchFilePath(); - } - - public void createControl(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(/* GridData.VERTICAL_ALIGN_FILL | */ GridData.HORIZONTAL_ALIGN_FILL)); - setControl(composite); - - Label l= new Label(composite, SWT.NONE); // a spacer - l.setText(PatchMessages.getString("InputPatchPage.SelectInput")); //$NON-NLS-1$ - buildInputGroup(composite); - - new Label(composite, SWT.NONE); // a spacer - - buildPatchFileGroup(composite); - - restoreWidgetValues(); - - updateWidgetEnablements(); - //updatePageCompletion(); - - Dialog.applyDialogFont(composite); - WorkbenchHelp.setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE); - } - - /* (non-JavaDoc) - * Method declared in IWizardPage. - */ - public IWizardPage getNextPage() { - - Patcher patcher= ((PatchWizard) getWizard()).getPatcher(); - - String source; - // Create a reader for the input - Reader reader= null; - if (getUseClipboard()) { - Control c= getControl(); - if (c != null) { - Clipboard clipboard= new Clipboard(c.getDisplay()); - Object o= clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) - reader= new StringReader((String)o); - } - source= PatchMessages.getString("InputPatchPage.Clipboard.title"); //$NON-NLS-1$ - } else { - String patchFilePath= getPatchFilePath(); - if (patchFilePath != null) { - try { - reader= new FileReader(patchFilePath); - } catch (FileNotFoundException ex) { - MessageDialog.openError(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ - PatchMessages.getString("InputPatchPage.PatchFileNotFound.message")); //$NON-NLS-1$ - } - } - source= PatchMessages.getString("InputPatchPage.PatchFile.title"); //$NON-NLS-1$ - } - - // parse the input - if (reader != null) { - try { - patcher.parse(new BufferedReader(reader)); - } catch (IOException ex) { - MessageDialog.openError(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), //$NON-NLS-1$ - PatchMessages.getString("InputPatchPage.ParseError.message")); //$NON-NLS-1$ - } - - try { - reader.close(); - } catch (IOException x) { - // silently ignored - } - } - - Diff[] diffs= patcher.getDiffs(); - if (diffs == null || diffs.length == 0) { - String format= PatchMessages.getString("InputPatchPage.NoDiffsFound.format"); //$NON-NLS-1$ - String message= MessageFormat.format(format, new String[] { source }); - MessageDialog.openInformation(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), message); //$NON-NLS-1$ - return this; - } - - // if selected target is file ensure that patch file - // contains only a patch for a single file - IResource target= fPatchWizard.getTarget(); - if (target instanceof IFile && diffs.length > 1) { - String format= PatchMessages.getString("InputPatchPage.SingleFileError.format"); //$NON-NLS-1$ - String message= MessageFormat.format(format, new String[] { source }); - MessageDialog.openInformation(null, - PatchMessages.getString("InputPatchPage.PatchErrorDialog.title"), message); //$NON-NLS-1$ - return this; - } - - // guess prefix count - int guess= 0; // guessPrefix(diffs); - patcher.setStripPrefixSegments(guess); - - return super.getNextPage(); - } - - /* (non-JavaDoc) - * Method declared in IWizardPage. - */ - public boolean canFlipToNextPage() { - // we can't call getNextPage to determine if flipping is allowed since computing - // the next page is quite expensive. So we say yes if the page is complete. - return isPageComplete(); - } - - private void setEnablePatchFile(boolean enable) { - fPatchFileNameField.setEnabled(enable); - fPatchFileBrowseButton.setEnabled(enable); - } - - /** - * Create the group for selecting the patch file - */ - private void buildPatchFileGroup(Composite parent) { - - fPatchFileGroup= new Group(parent, SWT.NONE); - fPatchFileGroup.setText(PatchMessages.getString("InputPatchPage.SelectPatch.title")); //$NON-NLS-1$ - GridLayout layout= new GridLayout(); - layout.numColumns= 3; - fPatchFileGroup.setLayout(layout); - fPatchFileGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // 1st row - fUsePatchFileButton= new Button(fPatchFileGroup, SWT.RADIO); - fUsePatchFileButton.setText(PatchMessages.getString("InputPatchPage.FileButton.text")); //$NON-NLS-1$ - - fPatchFileNameField= new Combo(fPatchFileGroup, SWT.BORDER); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - //gd.horizontalIndent= 8; - gd.widthHint= SIZING_TEXT_FIELD_WIDTH; - fPatchFileNameField.setLayoutData(gd); - - fPatchFileBrowseButton= new Button(fPatchFileGroup, SWT.PUSH); - fPatchFileBrowseButton.setText(PatchMessages.getString("InputPatchPage.ChooseFileButton.text")); //$NON-NLS-1$ - fPatchFileBrowseButton.setLayoutData(new GridData()); - - // 2nd row - fUseClipboardButton= new Button(fPatchFileGroup, SWT.RADIO); - fUseClipboardButton.setText(PatchMessages.getString("InputPatchPage.UseClipboardButton.text")); //$NON-NLS-1$ - gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); - gd.horizontalSpan= 2; - fUseClipboardButton.setLayoutData(gd); - - - // Add listeners - fUsePatchFileButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - fShowError= true; - setEnablePatchFile(!getUseClipboard()); - updateWidgetEnablements(); - } - } - ); - fPatchFileNameField.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - setSourceName(fPatchFileNameField.getText()); - updateWidgetEnablements(); - } - } - ); - fPatchFileNameField.addModifyListener( - new ModifyListener() { - public void modifyText(ModifyEvent e) { - fShowError= true; - updateWidgetEnablements(); - } - } - ); - fPatchFileBrowseButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - handlePatchFileBrowseButtonPressed(); - updateWidgetEnablements(); - } - } - ); - - //fPatchFileNameField.setFocus(); - } - - private void buildInputGroup(Composite parent) { - - PatchWizard pw= (PatchWizard) getWizard(); - IResource target= pw.getTarget(); - IWorkspace workspace= target.getWorkspace(); - IWorkspaceRoot root= workspace.getRoot(); - - Tree tree= new Tree(parent, SWT.BORDER); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.heightHint= 200; - tree.setLayoutData(gd); - - fPatchTargets= new CheckboxTreeViewer(tree); - fPatchTargets.setLabelProvider(new WorkbenchLabelProvider()); - fPatchTargets.setContentProvider(new WorkbenchContentProvider()); - fPatchTargets.setSorter(new WorkbenchViewerSorter()); - fPatchTargets.setInput(root); - if (target != null) { - fPatchTargets.expandToLevel(target, 0); - fPatchTargets.setSelection(new StructuredSelection(target)); - } - - // register listeners - fPatchTargets.addSelectionChangedListener( - new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - fPatchWizard.setTargets(Utilities.getResources(event.getSelection())); - updateWidgetEnablements(); - } - } - ); - } - - /** - * Updates the enable state of this page's controls. - */ - private void updateWidgetEnablements() { - - String error= null; - - ISelection selection= fPatchTargets.getSelection(); - boolean anySelected= selection != null && !selection.isEmpty(); - if (!anySelected) - error= PatchMessages.getString("InputPatchPage.NothingSelected.message"); //$NON-NLS-1$ - - boolean gotPatch= false; - if (getUseClipboard()) { - Control c= getControl(); - if (c != null) { - Clipboard clipboard= new Clipboard(c.getDisplay()); - Object o= clipboard.getContents(TextTransfer.getInstance()); - clipboard.dispose(); - if (o instanceof String) { - String s= ((String) o).trim(); - if (s.length() > 0) - gotPatch= true; - else - error= PatchMessages.getString("InputPatchPage.ClipboardIsEmpty.message"); //$NON-NLS-1$ - } else - error= PatchMessages.getString("InputPatchPage.NoTextInClipboard.message"); //$NON-NLS-1$ - } else - error= PatchMessages.getString("InputPatchPage.CouldNotReadClipboard.message"); //$NON-NLS-1$ - } else { - String path= fPatchFileNameField.getText(); - if (path != null && path.length() > 0) { - File file= new File(path); - gotPatch= file.exists() && file.isFile() && file.length() > 0; - if (!gotPatch) - error= PatchMessages.getString("InputPatchPage.CannotLocatePatch.message") + path; //$NON-NLS-1$ - } else { - error= PatchMessages.getString("InputPatchPage.NoFileName.message"); //$NON-NLS-1$ - } - } - - setPageComplete(anySelected && gotPatch); - if (fShowError) - setErrorMessage(error); - } - - protected void handlePatchFileBrowseButtonPressed() { - FileDialog dialog= new FileDialog(getShell(), SWT.NONE); - dialog.setText(PatchMessages.getString("InputPatchPage.SelectPatchFileDialog.title")); //$NON-NLS-1$ - dialog.setFilterPath(getPatchFilePath()); - String res= dialog.open(); - if (res == null) - return; - - String patchFilePath= dialog.getFileName(); - IPath filterPath= new Path(dialog.getFilterPath()); - IPath path= filterPath.append(patchFilePath).makeAbsolute(); - patchFilePath= path.toOSString(); - //fDialogSettings.put(IUIConstants.DIALOGSTORE_LASTEXTJAR, filterPath.toOSString()); - - fPatchFileNameField.setText(patchFilePath); - //setSourceName(patchFilePath); - } - - /** - * Sets the source name of the import to be the supplied path. - * Adds the name of the path to the list of items in the - * source combo and selects it. - * - * @param path the path to be added - */ - protected void setSourceName(String path) { - - if (path.length() > 0) { - - String[] currentItems= fPatchFileNameField.getItems(); - int selectionIndex= -1; - for (int i= 0; i < currentItems.length; i++) - if (currentItems[i].equals(path)) - selectionIndex= i; - - if (selectionIndex < 0) { // not found in history - int oldLength= currentItems.length; - String[] newItems= new String[oldLength + 1]; - System.arraycopy(currentItems, 0, newItems, 0, oldLength); - newItems[oldLength]= path; - fPatchFileNameField.setItems(newItems); - selectionIndex= oldLength; - } - fPatchFileNameField.select(selectionIndex); - - //resetSelection(); - } - } - - /** - * The Finish button was pressed. Try to do the required work now and answer - * a boolean indicating success. If false is returned then the wizard will - * not close. - * - * @return boolean - */ - public boolean finish() { -// if (!ensureSourceIsValid()) -// return false; - - saveWidgetValues(); - -// Iterator resourcesEnum = getSelectedResources().iterator(); -// List fileSystemObjects = new ArrayList(); -// while (resourcesEnum.hasNext()) { -// fileSystemObjects.add( -// ((FileSystemElement) resourcesEnum.next()).getFileSystemObject()); -// } -// -// if (fileSystemObjects.size() > 0) -// return importResources(fileSystemObjects); -// -// MessageDialog -// .openInformation( -// getContainer().getShell(), -// DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$ -// DataTransferMessages.getString("FileImport.noneSelected")); //$NON-NLS-1$ -// -// return false; - - return true; - } - - /** - * Use the dialog store to restore widget values to the values that they held - * last time this wizard was used to completion - */ - private void restoreWidgetValues() { - - boolean useClipboard= false; - - IDialogSettings settings= getDialogSettings(); - if (settings != null) { - - useClipboard= settings.getBoolean(STORE_USE_CLIPBOARD_ID); - - // set filenames history - String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID); - if (sourceNames != null) - for (int i= 0; i < sourceNames.length; i++) - if (sourceNames[i] != null && sourceNames[i].length() > 0) - fPatchFileNameField.add(sourceNames[i]); - - // set patch file path - String patchFilePath= settings.get(STORE_PATCH_FILES_ID); - if (patchFilePath != null) - setSourceName(patchFilePath); - } - - // set 'Use Clipboard' radio buttons - setUseClipboard(useClipboard); - } - - /** - * Since Finish was pressed, write widget values to the dialog store so that they - * will persist into the next invocation of this wizard page - */ - void saveWidgetValues() { - IDialogSettings settings= getDialogSettings(); - if (settings != null) { - - settings.put(STORE_USE_CLIPBOARD_ID, getUseClipboard()); - settings.put(STORE_PATCH_FILES_ID, getPatchFilePath()); - - // update source names history - String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID); - if (sourceNames == null) - sourceNames= new String[0]; - - sourceNames= addToHistory(sourceNames, getPatchFilePath()); - settings.put(STORE_PATCH_FILES_ID, sourceNames); - } - } - - // static helpers - - private void setUseClipboard(boolean useClipboard) { - if (useClipboard) - fUseClipboardButton.setSelection(true); - else - fUsePatchFileButton.setSelection(true); - setEnablePatchFile(!useClipboard); - } - - private boolean getUseClipboard() { - if (fUseClipboardButton != null) - return fUseClipboardButton.getSelection(); - return false; - } - - private String getPatchFilePath() { - if (fPatchFileNameField != null) - return fPatchFileNameField.getText(); - return ""; //$NON-NLS-1$ - } - - /** - * Adds an entry to a history, while taking care of duplicate history items - * and excessively long histories. The assumption is made that all histories - * should be of length <code>COMBO_HISTORY_LENGTH</code>. - * - * @param history the current history - * @param newEntry the entry to add to the history - */ - protected static String[] addToHistory(String[] history, String newEntry) { - java.util.ArrayList l= new java.util.ArrayList(java.util.Arrays.asList(history)); - - l.remove(newEntry); - l.add(0,newEntry); - - // since only one new item was added, we can be over the limit - // by at most one item - if (l.size() > COMBO_HISTORY_LENGTH) - l.remove(COMBO_HISTORY_LENGTH); - - return (String[]) l.toArray(new String[l.size()]); - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java deleted file mode 100644 index 2386ebf76..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.util.*; - -import org.eclipse.jface.util.Assert; - -/* package */ class LineReader { - - private boolean fHaveChar= false; - private int fLastChar; - private boolean fSawEOF= false; - private BufferedReader fReader; - private boolean fIgnoreSingleCR= false; - - - /* package */ LineReader(BufferedReader reader) { - fReader= reader; - Assert.isNotNull(reader); - } - - void ignoreSingleCR() { - fIgnoreSingleCR= true; - } - - /** - * Reads a line of text. A line is considered to be terminated by any one - * of a line feed ('\n'), a carriage return ('\r'), or a carriage return - * followed immediately by a linefeed. - * @return A string containing the contents of the line including - * the line-termination characters, or <code>null</code> if the end of the - * stream has been reached - * @exception IOException If an I/O error occurs - */ - /* package */ String readLine() throws IOException { - StringBuffer sb= null; - - while (!fSawEOF) { - int c= readChar(); - if (c == -1) { - fSawEOF= true; - break; - } - if (sb == null) - sb= new StringBuffer(); - sb.append((char)c); - if (c == '\n') - break; - if (c == '\r') { - c= readChar(); - if (c == -1) { - fSawEOF= true; - break; // EOF - } - if (c != '\n') { - if (fIgnoreSingleCR) { - sb.append((char)c); - continue; - } else { - fHaveChar= true; - fLastChar= c; - } - } else - sb.append((char)c); - break; - } - } - - if (sb != null) - return sb.toString(); - return null; - } - - /* package */ void close() { - try { - fReader.close(); - } catch (IOException ex) { - // silently ignored - } - } - - /* package */ List readLines() { - try { - List lines= new ArrayList(); - String line; - while ((line= readLine()) != null) - lines.add(line); - return lines; - } catch (IOException ex) { - // NeedWork - //System.out.println("error while reading file: " + fileName + "(" + ex + ")"); - } finally { - close(); - } - return null; - } - /** - * Returns the number of characters in the given string without - * counting a trailing line separator. - */ - /* package */ int lineContentLength(String line) { - if (line == null) - return 0; - int length= line.length(); - for (int i= length-1; i >= 0; i--) { - char c= line.charAt(i); - if (c =='\n' || c == '\r') - length--; - else - break; - } - return length; - } - - //---- private - - private int readChar() throws IOException { - if (fHaveChar) { - fHaveChar= false; - return fLastChar; - } - return fReader.read(); - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java deleted file mode 100644 index c4aee6382..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -public class PatchErrorDialog { - - private PatchErrorDialog() { - // no instance. - } - -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java deleted file mode 100644 index 569b875f6..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -public class PatchMessages { - - private static final String RESOURCE_BUNDLE= "org.eclipse.compare.internal.patch.PatchMessages";//$NON-NLS-1$ - - private static ResourceBundle fgResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE); - - private PatchMessages() { - } - - public static String getString(String key) { - try { - return fgResourceBundle.getString(key); - } catch (MissingResourceException e) { - return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties deleted file mode 100644 index 20c86331f..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties +++ /dev/null @@ -1,90 +0,0 @@ -############################################################################### -# Copyright (c) 2000, 2003 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Common Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/cpl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### - -# -# 'Compare with Patch' Action -# -PatchAction.ExceptionTitle=Saving Resources -PatchAction.Exception=Unexpected exception. See log for details -PatchAction.SavingDirtyEditorsTask=Saving dirty editors -PatchAction.AlwaysSaveQuestion=&Always save all modified resources automatically prior to patching -PatchAction.SaveAllQuestion=Save all modified resources -PatchAction.SaveAllDescription=All modified resources have to be saved before this operation.\nClick 'OK' to confirm or click 'Cancel'. - -# -# PatchWizard -# -PatchWizard.title=Apply Patch -PatchWizard.unexpectedException.message= Unexpected exception while applying the patch. See log for a detailed error description. - -# -# InputPatchPage -# -InputPatchPage.title= Patch Input Specification -InputPatchPage.message= Define the resource to patch and the patch to apply -InputPatchPage.Clipboard=Clipboard -InputPatchPage.SelectInput=Select a single file or folder to patch: -InputPatchPage.PatchErrorDialog.title=Patch Error -InputPatchPage.PatchErrorDialog=Patch Error -InputPatchPage.SelectPatch.title=Select Patch -InputPatchPage.FileButton.text=Fil&e -InputPatchPage.ChooseFileButton.text=&Browse... -InputPatchPage.UseClipboardButton.text=&Clipboard -InputPatchPage.NothingSelected.message=Select a file or folder to be patched -InputPatchPage.ClipboardIsEmpty.message=Clipboard is empty -InputPatchPage.NoTextInClipboard.message=Clipboard does not contain text -InputPatchPage.CouldNotReadClipboard.message=Couldn't retrieve clipboard contents -InputPatchPage.CannotLocatePatch.message=Can't locate patch file: -InputPatchPage.NoFileName.message=No file name -InputPatchPage.SelectPatchFileDialog.title=Select Patch File -InputPatchPage.PatchFileNotFound.message=Patch file not found. -InputPatchPage.ParseError.message=Error while parsing patch -InputPatchPage.Clipboard.title=Clipboard -InputPatchPage.PatchFile.title=Patch file -InputPatchPage.NoDiffsFound.format={0} does not contain valid patch. -InputPatchPage.SingleFileError.format={0} contains multiple patches. You cannot apply them to a single file. - -# -# PreviewPatchPage -# -PreviewPatchPage.title= Verify Patch -PreviewPatchPage.message= The tree shows the contents of the patch.\nA checked item indicates that a patch can be applied successfully. To remove an item, clear its checkbox. -PreviewPatchPage.Left.title= Original -PreviewPatchPage.Right.title= Result -PreviewPatchPage.PatchOptions.title=Patch Options -PreviewPatchPage.IgnoreSegments.text=&Ignore leading path name segments: -PreviewPatchPage.ReversePatch.text=&Reverse patch -PreviewPatchPage.FuzzFactor.text=&Maximum fuzz factor: -PreviewPatchPage.FuzzFactor.tooltip=Allow context to shift this number of lines from the original place -PreviewPatchPage.IgnoreWhitespace.text=Ignore &white space -PreviewPatchPage.NoName.text=no name -PreviewPatchPage.FileExists.error=(file already exists) -PreviewPatchPage.FileDoesNotExist.error=(file doesn't exist) -PreviewPatchPage.NoMatch.error=(no match) -PreviewPatchPage.FileIsReadOnly.error=(file is read only) -PreviewPatchPage.GuessFuzz.text= &Guess -PreviewPatchPage.GuessFuzzProgress.text= Guessing Fuzz Factor... -PreviewPatchPage.GuessFuzzProgress.format= {0} (hunk #{1}) - -# -# Patcher -# -Patcher.ErrorDialog.title=title -Patcher.DeleteError.message=Error while deleting resource -Patcher.UpdateError.message=Error while updating resource -Patcher.RefreshError.message=Error while refreshing from local -Patcher.Marker.message=Rejected patch -Patcher.Task.message=Patching - -# -# PatchCompareInput -# -PatchCompareInput.RightTitle.format= Patch: {0} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java deleted file mode 100644 index 9750bf173..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java +++ /dev/null @@ -1,135 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.jface.dialogs.IDialogSettings; -import org.eclipse.jface.viewers.*; -import org.eclipse.jface.wizard.Wizard; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.CoreException; - -import org.eclipse.ui.actions.WorkspaceModifyOperation; - -import org.eclipse.compare.internal.*; - - -/* package */ class PatchWizard extends Wizard { - - // dialog store id constants - private final static String DIALOG_SETTINGS_KEY= "PatchWizard"; //$NON-NLS-1$ - - private boolean fHasNewDialogSettings; - - private InputPatchPage fPatchWizardPage; - - private Patcher fPatcher; - private IResource fTarget; - - - /** - * Creates a wizard for applying a patch file to the workspace. - */ - /* package */ PatchWizard(ISelection selection) { - - setDefaultPageImageDescriptor(CompareUIPlugin.getImageDescriptor("wizban/applypatch_wizban.gif")); //$NON-NLS-1$ - setWindowTitle(PatchMessages.getString("PatchWizard.title")); //$NON-NLS-1$ - - setTargets(Utilities.getResources(selection)); - - fPatcher= new Patcher(); - - IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); //$NON-NLS-1$ - if (section == null) - fHasNewDialogSettings= true; - else { - fHasNewDialogSettings= false; - setDialogSettings(section); - } - } - - Patcher getPatcher() { - return fPatcher; - } - - IResource getTarget() { - return fTarget; - } - - void setTargets(IResource[] targets) { - if (targets != null) - fTarget= targets[0]; // right now we can only deal with a single selection - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public void addPages() { - super.addPages(); - - addPage(fPatchWizardPage= new InputPatchPage(this)); - addPage(new PreviewPatchPage(this)); - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public boolean needsProgressMonitor() { - return true; - } - - /* (non-Javadoc) - * Method declared on IWizard. - */ - public boolean performFinish() { - - fPatcher.setName(fPatchWizardPage.getPatchName()); - - try { - WorkspaceModifyOperation op= new WorkspaceModifyOperation() { - protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - fPatcher.applyAll(getTarget(), monitor, getShell(), PatchMessages.getString("PatchWizard.title")); //$NON-NLS-1$ - } catch (CoreException e) { - throw new InvocationTargetException(e); - } - } - }; - getContainer().run(true, false, op); - - } catch (InvocationTargetException e) { - ExceptionHandler.handle(e, - PatchMessages.getString("PatchWizard.title"), //$NON-NLS-1$ - PatchMessages.getString("PatchWizard.unexpectedException.message")); //$NON-NLS-1$ - } catch (InterruptedException e) { - // cannot happen - // NeedWork: use assert! - } - - // Save the dialog settings - if (fHasNewDialogSettings) { - IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings(); - IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY); - section= workbenchSettings.addNewSection(DIALOG_SETTINGS_KEY); - setDialogSettings(section); - } - - fPatchWizardPage.saveWidgetValues(); - //fPreviewPatchPage.saveWidgetValues(); - - return true; - } -} - diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java deleted file mode 100644 index d5d2d1dad..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java +++ /dev/null @@ -1,1080 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.text.*; -import java.util.*; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Shell; - -import org.eclipse.jface.util.Assert; - -import org.eclipse.core.runtime.*; -import org.eclipse.core.resources.*; - -import org.eclipse.compare.internal.Utilities; -import org.eclipse.compare.structuremergeviewer.Differencer; - -/** - * A Patcher - * - knows how to parse various patch file formats into some in-memory structure, - * - holds onto the parsed data and the options to use when applying the patches, - * - knows how to apply the patches to files and folders. - */ -public class Patcher { - - private static final boolean DEBUG= false; - - private static final String DEV_NULL= "/dev/null"; //$NON-NLS-1$ - - private static final String REJECT_FILE_EXTENSION= ".rej"; //$NON-NLS-1$ - - private static final String MARKER_TYPE= "org.eclipse.compare.rejectedPatchMarker"; //$NON-NLS-1$ - - // diff formats -// private static final int CONTEXT= 0; -// private static final int ED= 1; -// private static final int NORMAL= 2; -// private static final int UNIFIED= 3; - - // we recognize the following date/time formats - private static DateFormat[] DATE_FORMATS= new DateFormat[] { - new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy"), //$NON-NLS-1$ - new SimpleDateFormat("yyyy/MM/dd kk:mm:ss"), //$NON-NLS-1$ - new SimpleDateFormat("EEE MMM dd kk:mm:ss yyyy", Locale.US) //$NON-NLS-1$ - }; - - private String fName; - private Diff[] fDiffs; - // patch options - private int fStripPrefixSegments; - private int fFuzz; - private boolean fIgnoreWhitespace= false; - private boolean fIgnoreLineDelimiter= true; - private boolean fPreserveLineDelimiters= false; - private boolean fReverse= false; - private boolean fAdjustShift= true; - - - Patcher() { - } - - //---- options - - void setName(String name) { - fName= name; - } - - String getName() { - return fName; - } - - /** - * Returns an array of Diffs after a sucessfull call to <code>parse</code>. - * If <code>parse</code> hasn't been called returns <code>null</code>. - */ - Diff[] getDiffs() { - return fDiffs; - } - - IPath getPath(Diff diff) { - IPath path= diff.getPath(); - if (fStripPrefixSegments > 0 && fStripPrefixSegments < path.segmentCount()) - path= path.removeFirstSegments(fStripPrefixSegments); - return path; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setStripPrefixSegments(int strip) { - if (strip != fStripPrefixSegments) { - fStripPrefixSegments= strip; - return true; - } - return false; - } - - int getStripPrefixSegments() { - return fStripPrefixSegments; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setFuzz(int fuzz) { - if (fuzz != fFuzz) { - fFuzz= fuzz; - return true; - } - return false; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setReversed(boolean reverse) { - if (fReverse != reverse) { - fReverse= reverse; - - for (int i= 0; i < fDiffs.length; i++) - fDiffs[i].reverse(); - - return true; - } - return false; - } - - /** - * Returns <code>true</code> if new value differs from old. - */ - boolean setIgnoreWhitespace(boolean ignoreWhitespace) { - if (ignoreWhitespace != fIgnoreWhitespace) { - fIgnoreWhitespace= ignoreWhitespace; - return true; - } - return false; - } - - //---- parsing patch files - - /* package */ void parse(BufferedReader reader) throws IOException { - List diffs= new ArrayList(); - String line= null; - boolean reread= false; - String diffArgs= null; - String fileName= null; - - LineReader lr= new LineReader(reader); - if (!"carbon".equals(SWT.getPlatform())) //$NON-NLS-1$ - lr.ignoreSingleCR(); - - // read leading garbage - while (true) { - if (!reread) - line= lr.readLine(); - reread= false; - if (line == null) - break; - if (line.length() < 4) - continue; // too short - - // remember some infos - if (line.startsWith("Index: ")) { //$NON-NLS-1$ - fileName= line.substring(7).trim(); - continue; - } - if (line.startsWith("diff")) { //$NON-NLS-1$ - diffArgs= line.substring(4).trim(); - continue; - } - - if (line.startsWith("--- ")) { //$NON-NLS-1$ - line= readUnifiedDiff(diffs, lr, line, diffArgs, fileName); - diffArgs= fileName= null; - reread= true; - } else if (line.startsWith("*** ")) { //$NON-NLS-1$ - line= readContextDiff(diffs, lr, line, diffArgs, fileName); - diffArgs= fileName= null; - reread= true; - } - } - - lr.close(); - - fDiffs= (Diff[]) diffs.toArray(new Diff[diffs.size()]); - } - - /** - * Returns the next line that does not belong to this diff - */ - private String readUnifiedDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException { - - String[] oldArgs= split(line.substring(4)); - - // read info about new file - line= reader.readLine(); - if (line == null || !line.startsWith("+++ ")) //$NON-NLS-1$ - return line; - - String[] newArgs= split(line.substring(4)); - - Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1), - extractPath(newArgs, 0, fileName), extractDate(newArgs, 1)); - diffs.add(diff); - - int[] oldRange= new int[2]; - int[] newRange= new int[2]; - List lines= new ArrayList(); - - try { - // read lines of hunk - while (true) { - - line= reader.readLine(); - if (line == null) - return null; - - if (reader.lineContentLength(line) == 0) { - //System.out.println("Warning: found empty line in hunk; ignored"); - //lines.add(' ' + line); - continue; - } - - char c= line.charAt(0); - switch (c) { - case '@': - if (line.startsWith("@@ ")) { //$NON-NLS-1$ - // flush old hunk - if (lines.size() > 0) { - new Hunk(diff, oldRange, newRange, lines); - lines.clear(); - } - - // format: @@ -oldStart,oldLength +newStart,newLength @@ - extractPair(line, '-', oldRange); - extractPair(line, '+', newRange); - continue; - } - break; - case ' ': - case '+': - case '-': - lines.add(line); - continue; - case '\\': - if (line.startsWith("No newline at end of file", 2)) { //$NON-NLS-1$ - int lastIndex= lines.size(); - if (lastIndex > 0) { - line= (String) lines.get(lastIndex-1); - int end= line.length()-1; - char lc= line.charAt(end); - if (lc == '\n') { - end--; - if (end > 0 && line.charAt(end-1) == '\r') - end--; - } else if (lc == '\r') { - end--; - } - line= line.substring(0, end); - lines.set(lastIndex-1, line); - } - continue; - } - break; - default: - if (DEBUG) { - int a1= c, a2= 0; - if (line.length() > 1) - a2= line.charAt(1); - System.out.println("char: " + a1 + " " + a2); //$NON-NLS-1$ //$NON-NLS-2$ - } - break; - } - return line; - } - } finally { - if (lines.size() > 0) - new Hunk(diff, oldRange, newRange, lines); - diff.finish(); - } - } - - /** - * Returns the next line that does not belong to this diff - */ - private String readContextDiff(List diffs, LineReader reader, String line, String args, String fileName) throws IOException { - - String[] oldArgs= split(line.substring(4)); - - // read info about new file - line= reader.readLine(); - if (line == null || !line.startsWith("--- ")) //$NON-NLS-1$ - return line; - - String[] newArgs= split(line.substring(4)); - - Diff diff= new Diff(extractPath(oldArgs, 0, fileName), extractDate(oldArgs, 1), - extractPath(newArgs, 0, fileName), extractDate(newArgs, 1)); - diffs.add(diff); - - int[] oldRange= new int[2]; - int[] newRange= new int[2]; - List oldLines= new ArrayList(); - List newLines= new ArrayList(); - List lines= oldLines; - - try { - // read lines of hunk - while (true) { - - line= reader.readLine(); - if (line == null) - return line; - - int l= line.length(); - if (l == 0) - continue; - if (l > 1) { - switch (line.charAt(0)) { - case '*': - if (line.startsWith("***************")) { // new hunk //$NON-NLS-1$ - // flush old hunk - if (oldLines.size() > 0 || newLines.size() > 0) { - new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines)); - oldLines.clear(); - newLines.clear(); - } - continue; - } - if (line.startsWith("*** ")) { // old range //$NON-NLS-1$ - // format: *** oldStart,oldEnd *** - extractPair(line, ' ', oldRange); - oldRange[1]= oldRange[1]-oldRange[0]+1; - lines= oldLines; - continue; - } - break; - case ' ': // context line - case '+': // addition - case '!': // change - if (line.charAt(1) == ' ') { - lines.add(line); - continue; - } - break; - case '-': - if (line.charAt(1) == ' ') { // deletion - lines.add(line); - continue; - } - if (line.startsWith("--- ")) { // new range //$NON-NLS-1$ - // format: *** newStart,newEnd *** - extractPair(line, ' ', newRange); - newRange[1]= newRange[1]-newRange[0]+1; - lines= newLines; - continue; - } - break; - default: - break; - } - } - return line; - } - } finally { - // flush last hunk - if (oldLines.size() > 0 || newLines.size() > 0) - new Hunk(diff, oldRange, newRange, unifyLines(oldLines, newLines)); - diff.finish(); - } - } - - /** - * Creates a List of lines in the unified format from - * two Lists of lines in the 'classic' format. - */ - private List unifyLines(List oldLines, List newLines) { - List result= new ArrayList(); - - String[] ol= (String[]) oldLines.toArray(new String[oldLines.size()]); - String[] nl= (String[]) newLines.toArray(new String[newLines.size()]); - - int oi= 0, ni= 0; - - while (true) { - - char oc= 0; - String o= null; - if (oi < ol.length) { - o= ol[oi]; - oc= o.charAt(0); - } - - char nc= 0; - String n= null; - if (ni < nl.length) { - n= nl[ni]; - nc= n.charAt(0); - } - - // EOF - if (oc == 0 && nc == 0) - break; - - // deletion in old - if (oc == '-') { - do { - result.add('-' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == '-'); - continue; - } - - // addition in new - if (nc == '+') { - do { - result.add('+' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == '+'); - continue; - } - - // differing lines on both sides - if (oc == '!' && nc == '!') { - // remove old - do { - result.add('-' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == '!'); - - // add new - do { - result.add('+' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == '!'); - - continue; - } - - // context lines - if (oc == ' ' && nc == ' ') { - do { - Assert.isTrue(o.equals(n), "non matching context lines"); //$NON-NLS-1$ - result.add(' ' + o.substring(2)); - oi++; - ni++; - if (oi >= ol.length || ni >= nl.length) - break; - o= ol[oi]; - n= nl[ni]; - } while (o.charAt(0) == ' ' && n.charAt(0) == ' '); - continue; - } - - if (oc == ' ') { - do { - result.add(' ' + o.substring(2)); - oi++; - if (oi >= ol.length) - break; - o= ol[oi]; - } while (o.charAt(0) == ' '); - continue; - } - - if (nc == ' ') { - do { - result.add(' ' + n.substring(2)); - ni++; - if (ni >= nl.length) - break; - n= nl[ni]; - } while (n.charAt(0) == ' '); - continue; - } - - Assert.isTrue(false, "unexpected char <" + oc + "> <" + nc + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - - return result; - } - - /** - * Breaks the given string into tab separated substrings. - * Leading and trailing whitespace is removed from each token. - */ - private String[] split(String line) { - List l= new ArrayList(); - StringTokenizer st= new StringTokenizer(line, "\t"); //$NON-NLS-1$ - while (st.hasMoreElements()) { - String token= st.nextToken().trim(); - if (token.length() > 0) - l.add(token); - } - return (String[]) l.toArray(new String[l.size()]); - } - - /** - * @return the parsed time/date in milliseconds or -1 on error - */ - private long extractDate(String[] args, int n) { - if (n < args.length) { - String line= args[n]; - for (int i= 0; i < DATE_FORMATS.length; i++) { - DATE_FORMATS[i].setLenient(true); - try { - Date date= DATE_FORMATS[i].parse(line); - return date.getTime(); - } catch (ParseException ex) { - // silently ignored - } - } - // System.err.println("can't parse date: <" + line + ">"); - } - return -1; - } - - /** - * Returns null if file name is "/dev/null". - */ - private IPath extractPath(String[] args, int n, String path2) { - if (n < args.length) { - String path= args[n]; - if (DEV_NULL.equals(path)) - return null; - int pos= path.lastIndexOf(':'); - if (pos >= 0) - path= path.substring(0, pos); - if (path2 != null && !path2.equals(path)) { - if (DEBUG) System.out.println("path mismatch: " + path2); //$NON-NLS-1$ - path= path2; - } - return new Path(path); - } - return null; - } - - /** - * Tries to extract two integers separated by a comma. - * The parsing of the line starts at the position after - * the first occurrence of the given character start an ends - * at the first blank (or the end of the line). - * If only a single number is found this is assumed to be the length of the range. - * In this case the start of the range is set to 1. - * If an error occurs the range -1,-1 is returned. - */ - private void extractPair(String line, char start, int[] pair) { - pair[0]= pair[1]= -1; - int startPos= line.indexOf(start); - if (startPos < 0) { - if (DEBUG) System.out.println("parsing error in extractPair: couldn't find \'" + start + "\'"); //$NON-NLS-1$ //$NON-NLS-2$ - return; - } - line= line.substring(startPos+1); - int endPos= line.indexOf(' '); - if (endPos < 0) { - if (DEBUG) System.out.println("parsing error in extractPair: couldn't find end blank"); //$NON-NLS-1$ - return; - } - line= line.substring(0, endPos); - int comma= line.indexOf(','); - if (comma >= 0) { - pair[0]= Integer.parseInt(line.substring(0, comma)); - pair[1]= Integer.parseInt(line.substring(comma+1)); - } else { - pair[0]= 1; - pair[1]= Integer.parseInt(line.substring(comma+1)); - } - } - - //---- applying a patch file - - /** - * Tries to patch the given lines with the specified Diff. - * Any hunk that couldn't be applied is returned in the list failedHunks. - */ - /* package */ void patch(Diff diff, List lines, List failedHunks) { - - int shift= 0; - Iterator iter= diff.fHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - hunk.fMatches= false; - shift= patch(hunk, lines, shift, failedHunks); - } - } - - /** - * Tries to apply the specified hunk to the given lines. - * If the hunk cannot be applied at the original position - * the methods tries Fuzz lines before and after. - * If this fails the Hunk is added to the given list of failed hunks. - */ - private int patch(Hunk hunk, List lines, int shift, List failedHunks) { - if (tryPatch(hunk, lines, shift)) { - if (hunk.isEnabled()) - shift+= doPatch(hunk, lines, shift); - } else { - boolean found= false; - int oldShift= shift; - - for (int i= 1; i <= fFuzz; i++) { - if (tryPatch(hunk, lines, shift-i)) { - if (fAdjustShift) - shift-= i; - found= true; - break; - } - } - - if (! found) { - for (int i= 1; i <= fFuzz; i++) { - if (tryPatch(hunk, lines, shift+i)) { - if (fAdjustShift) - shift+= i; - found= true; - break; - } - } - } - - if (found) { - if (DEBUG) System.out.println("patched hunk at offset: " + (shift-oldShift)); //$NON-NLS-1$ - shift+= doPatch(hunk, lines, shift); - } else { - if (failedHunks != null) { - if (DEBUG) System.out.println("failed hunk"); //$NON-NLS-1$ - failedHunks.add(hunk); - } - } - } - return shift; - } - - /** - * Tries to apply the given hunk on the specified lines. - * The parameter shift is added to the line numbers given - * in the hunk. - */ - private boolean tryPatch(Hunk hunk, List lines, int shift) { - int pos= hunk.fOldStart + shift; - int deleteMatches= 0; - for (int i= 0; i < hunk.fLines.length; i++) { - String s= hunk.fLines[i]; - Assert.isTrue(s.length() > 0); - String line= s.substring(1); - char controlChar= s.charAt(0); - if (controlChar == ' ') { // context lines - while (true) { - if (pos < 0 || pos >= lines.size()) - return false; - if (linesMatch(line, (String) lines.get(pos))) { - pos++; - break; - } - return false; - } - } else if (controlChar == '-') { - // deleted lines - while (true) { - if (pos < 0 || pos >= lines.size()) - return false; - if (linesMatch(line, (String) lines.get(pos))) { - deleteMatches++; - pos++; - break; - } - if (deleteMatches <= 0) - return false; - pos++; - } - } else if (controlChar == '+') { - // added lines - // we don't have to do anything for a 'try' - } else - Assert.isTrue(false, "tryPatch: unknown control character: " + controlChar); //$NON-NLS-1$ - } - return true; - } - - private int doPatch(Hunk hunk, List lines, int shift) { - int pos= hunk.fOldStart + shift; - for (int i= 0; i < hunk.fLines.length; i++) { - String s= hunk.fLines[i]; - Assert.isTrue(s.length() > 0); - String line= s.substring(1); - char controlChar= s.charAt(0); - if (controlChar == ' ') { // context lines - while (true) { - Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in context"); //$NON-NLS-1$ - if (linesMatch(line, (String) lines.get(pos))) { - pos++; - break; - } - pos++; - } - } else if (controlChar == '-') { - // deleted lines - while (true) { - Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in deleted lines"); //$NON-NLS-1$ - if (linesMatch(line, (String) lines.get(pos))) { - break; - } - pos++; - } - lines.remove(pos); - } else if (controlChar == '+') { - // added lines - lines.add(pos, line); - pos++; - } else - Assert.isTrue(false, "doPatch: unknown control character: " + controlChar); //$NON-NLS-1$ - } - hunk.fMatches= true; - return hunk.fNewLength - hunk.fOldLength; - } - - public void applyAll(IResource target, IProgressMonitor pm, Shell shell, String title) throws CoreException { - - final int WORK_UNIT= 10; - - int i; - - IFile singleFile= null; // file to be patched - IContainer container= null; - if (target instanceof IContainer) - container= (IContainer) target; - else if (target instanceof IFile) { - singleFile= (IFile) target; - container= singleFile.getParent(); - } else { - Assert.isTrue(false); - } - - // get all files to be modified in order to call validateEdit - List list= new ArrayList(); - if (singleFile != null) - list.add(singleFile); - else { - for (i= 0; i < fDiffs.length; i++) { - Diff diff= fDiffs[i]; - if (diff.isEnabled()) { - switch (diff.getType()) { - case Differencer.CHANGE: - list.add(createPath(container, getPath(diff))); - break; - } - } - } - } - if (! Utilities.validateResources(list, shell, title)) - return; - - if (pm != null) { - String message= PatchMessages.getString("Patcher.Task.message"); //$NON-NLS-1$ - pm.beginTask(message, fDiffs.length*WORK_UNIT); - } - - for (i= 0; i < fDiffs.length; i++) { - - int workTicks= WORK_UNIT; - - Diff diff= fDiffs[i]; - if (diff.isEnabled()) { - - IPath path= getPath(diff); - if (pm != null) - pm.subTask(path.toString()); - - IFile file= singleFile != null - ? singleFile - : createPath(container, path); - - List failed= new ArrayList(); - List result= null; - - int type= diff.getType(); - switch (type) { - case Differencer.ADDITION: - // patch it and collect rejected hunks - result= apply(diff, file, true, failed); - store(createString(result), file, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - case Differencer.DELETION: - file.delete(true, true, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - case Differencer.CHANGE: - // patch it and collect rejected hunks - result= apply(diff, file, false, failed); - store(createString(result), file, new SubProgressMonitor(pm, workTicks)); - workTicks-= WORK_UNIT; - break; - } - - if (failed.size() > 0) { - IPath pp= null; - if (path.segmentCount() > 1) { - pp= path.removeLastSegments(1); - pp= pp.append(path.lastSegment() + REJECT_FILE_EXTENSION); - } else - pp= new Path(path.lastSegment() + REJECT_FILE_EXTENSION); - file= createPath(container, pp); - if (file != null) { - store(getRejected(failed), file, pm); - try { - IMarker marker= file.createMarker(MARKER_TYPE); - marker.setAttribute(IMarker.MESSAGE, PatchMessages.getString("Patcher.Marker.message")); //$NON-NLS-1$ - marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH); - } catch (CoreException ex) { - // NeedWork - } - } - } - } - - if (pm != null) { - if (pm.isCanceled()) - break; - if (workTicks > 0) - pm.worked(workTicks); - } - } - } - - /** - * Reads the contents from the given file and returns them as - * a List of lines. - */ - List load(IFile file, boolean create) { - List lines= null; - if (!create && file != null) { - // read current contents - InputStream is= null; - try { - is= file.getContents(); - - Reader streamReader= null; - try { - streamReader= new InputStreamReader(is, Utilities.getCharset(file)); - } catch (UnsupportedEncodingException x) { - // use default encoding - streamReader= new InputStreamReader(is); - } - - BufferedReader reader= new BufferedReader(streamReader); - LineReader lr= new LineReader(reader); - if (!"carbon".equals(SWT.getPlatform())) //$NON-NLS-1$ - lr.ignoreSingleCR(); - lines= lr.readLines(); - } catch(CoreException ex) { - // NeedWork - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - // silently ignored - } - } - } - - if (lines == null) - lines= new ArrayList(); - return lines; - } - - List apply(Diff diff, IFile file, boolean create, List failedHunks) { - List lines= load(file, create); - patch(diff, lines, failedHunks); - return lines; - } - - /** - * Converts the string into bytes and stores them in the given file. - */ - private void store(String contents, IFile file, IProgressMonitor pm) throws CoreException { - - byte[] bytes; - try { - bytes= contents.getBytes(Utilities.getCharset(file)); - } catch (UnsupportedEncodingException x) { - // uses default encoding - bytes= contents.getBytes(); - } - - InputStream is= new ByteArrayInputStream(bytes); - try { - if (file.exists()) { - file.setContents(is, false, true, pm); - } else { - file.create(is, false, pm); - } - } finally { - if (is != null) - try { - is.close(); - } catch(IOException ex) { - // silently ignored - } - } - } - - /** - * Concatenates all strings found in the given List. - */ - private String createString(List lines) { - StringBuffer sb= new StringBuffer(); - Iterator iter= lines.iterator(); - if (fPreserveLineDelimiters) { - while (iter.hasNext()) - sb.append((String)iter.next()); - } else { - String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$ - while (iter.hasNext()) { - String line= (String)iter.next(); - int l= length(line); - if (l < line.length()) { // line has delimiter - sb.append(line.substring(0, l)); - sb.append(lineSeparator); - } else { - sb.append(line); - } - } - } - return sb.toString(); - } - - String getRejected(List failedHunks) { - if (failedHunks.size() <= 0) - return null; - - String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$ - StringBuffer sb= new StringBuffer(); - Iterator iter= failedHunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - sb.append(hunk.getRejectedDescription()); - sb.append(lineSeparator); - sb.append(hunk.getContent()); - } - return sb.toString(); - } - - /** - * Ensures that a file with the given path exists in - * the given container. Folder are created as necessary. - */ - private IFile createPath(IContainer container, IPath path) throws CoreException { - if (path.segmentCount() > 1) { - IFolder f= container.getFolder(path.uptoSegment(1)); - if (!f.exists()) - f.create(false, true, null); - return createPath(f, path.removeFirstSegments(1)); - } - // a leaf - return container.getFile(path); - } - - /** - * Returns the given string with all whitespace characters removed. - * Whitespace is defined by <code>Character.isWhitespace(...)</code>. - */ - private static String stripWhiteSpace(String s) { - StringBuffer sb= new StringBuffer(); - int l= s.length(); - for (int i= 0; i < l; i++) { - char c= s.charAt(i); - if (!Character.isWhitespace(c)) - sb.append(c); - } - return sb.toString(); - } - - /** - * Compares two strings. - * If fIgnoreWhitespace is true whitespace is ignored. - */ - private boolean linesMatch(String line1, String line2) { - if (fIgnoreWhitespace) - return stripWhiteSpace(line1).equals(stripWhiteSpace(line2)); - if (fIgnoreLineDelimiter) { - int l1= length(line1); - int l2= length(line2); - if (l1 != l2) - return false; - return line1.regionMatches(0, line2, 0, l1); - } - return line1.equals(line2); - } - - /** - * Returns the length (exluding a line delimiter CR, LF, CR/LF) - * of the given string. - */ - /* package */ static int length(String s) { - int l= s.length(); - if (l > 0) { - char c= s.charAt(l-1); - if (c == '\r') - return l-1; - if (c == '\n') { - if (l > 1 && s.charAt(l-2) == '\r') - return l-2; - return l-1; - } - } - return l; - } - - int calculateFuzz(Hunk hunk, List lines, int shift, IProgressMonitor pm, int[] fuzz) { - - hunk.fMatches= false; - if (tryPatch(hunk, lines, shift)) { - shift+= doPatch(hunk, lines, shift); - fuzz[0]= 0; - } else { - boolean found= false; - int hugeFuzz= lines.size(); // the maximum we need for this file - fuzz[0]= -2; // not found - - for (int i= 1; i <= hugeFuzz; i++) { - if (pm.isCanceled()) { - fuzz[0]= -1; - return 0; - } - if (tryPatch(hunk, lines, shift-i)) { - fuzz[0]= i; - if (fAdjustShift) - shift-= i; - found= true; - break; - } - } - - if (! found) { - for (int i= 1; i <= hugeFuzz; i++) { - if (pm.isCanceled()) { - fuzz[0]= -1; - return 0; - } - if (tryPatch(hunk, lines, shift+i)) { - fuzz[0]= i; - if (fAdjustShift) - shift+= i; - found= true; - break; - } - } - } - - if (found) - shift+= doPatch(hunk, lines, shift); - } - return shift; - } -} diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java deleted file mode 100644 index 380a8422b..000000000 --- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage.java +++ /dev/null @@ -1,738 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2003 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.compare.internal.patch; - -import java.io.*; -import java.lang.reflect.InvocationTargetException; -import java.text.MessageFormat; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.*; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.help.WorkbenchHelp; - -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.operation.IRunnableWithProgress; -import org.eclipse.jface.resource.ImageDescriptor; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; - -import org.eclipse.compare.*; -import org.eclipse.compare.internal.CompareUIPlugin; -import org.eclipse.compare.internal.DiffImage; -import org.eclipse.compare.internal.ICompareContextIds; -import org.eclipse.compare.internal.TimeoutContext; -import org.eclipse.compare.internal.Utilities; -import org.eclipse.compare.structuremergeviewer.*; - - -/** - * Shows the parsed patch file and any mismatches - * between files, hunks and the currently selected - * resources. - */ -/* package */ class PreviewPatchPage extends WizardPage { - - static final int GUESS_TIMEOUT= 1500; // show progress after 1.5sec of fuzz factor guessing - - /** - * Used with CompareInput - */ - static class HunkInput implements ITypedElement, IStreamContentAccessorExtension2 { - static final String UTF_16= "UTF-16"; //$NON-NLS-1$ - String fContent; - String fType; - - HunkInput(String type, String s) { - fType= type; - fContent= s; - } - public Image getImage() { - return null; - } - public String getName() { - return PatchMessages.getString("PreviewPatchPage.NoName.text"); //$NON-NLS-1$ - } - public String getType() { - return fType; - } - public InputStream getContents() { - return new ByteArrayInputStream(Utilities.getBytes(fContent, UTF_16)); - } - public String getCharset() { - return UTF_16; - } - } - - private PatchWizard fPatchWizard; - - private Tree fTree; - private Combo fStripPrefixSegments; - private CompareViewerSwitchingPane fHunkViewer; - private Button fIgnoreWhitespaceButton; - private Button fReversePatchButton; - private Text fFuzzField; - - private Image fNullImage; - private Image fAddImage; - private Image fDelImage; - private Image fErrorImage; - private Image fErrorAddImage; - private Image fErrorDelImage; - - private CompareConfiguration fCompareConfiguration; - - - /* package */ PreviewPatchPage(PatchWizard pw) { - super("PreviewPatchPage", //$NON-NLS-1$ - PatchMessages.getString("PreviewPatchPage.title"), null); //$NON-NLS-1$ - - setMessage(PatchMessages.getString("PreviewPatchPage.message")); //$NON-NLS-1$ - - fPatchWizard= pw; - //setPageComplete(false); - - int w= 16; - - ImageDescriptor addId= CompareUIPlugin.getImageDescriptor("ovr16/add_ov.gif"); //$NON-NLS-1$ - ImageDescriptor delId= CompareUIPlugin.getImageDescriptor("ovr16/del_ov.gif"); //$NON-NLS-1$ - - ImageDescriptor errId= CompareUIPlugin.getImageDescriptor("ovr16/error_ov.gif"); //$NON-NLS-1$ - Image errIm= errId.createImage(); - - fNullImage= new DiffImage(null, null, w).createImage(); - fAddImage= new DiffImage(null, addId, w).createImage(); - fDelImage= new DiffImage(null, delId, w).createImage(); - - fErrorImage= new DiffImage(errIm, null, w).createImage(); - fErrorAddImage= new DiffImage(errIm, addId, w).createImage(); - fErrorDelImage= new DiffImage(errIm, delId, w).createImage(); - - fCompareConfiguration= new CompareConfiguration(); - - fCompareConfiguration.setLeftEditable(false); - fCompareConfiguration.setLeftLabel(PatchMessages.getString("PreviewPatchPage.Left.title")); //$NON-NLS-1$ - - fCompareConfiguration.setRightEditable(false); - fCompareConfiguration.setRightLabel(PatchMessages.getString("PreviewPatchPage.Right.title")); //$NON-NLS-1$ - } - - /* (non-Javadoc) - * Method declared in WizardPage - */ - public void setVisible(boolean visible) { - if (visible) - buildTree(); - super.setVisible(visible); - } - - Image getImage(Diff diff) { - if (diff.fMatches) { - switch (diff.getType()) { - case Differencer.ADDITION: - return fAddImage; - case Differencer.DELETION: - return fDelImage; - } - return fNullImage; - } - switch (diff.getType()) { - case Differencer.ADDITION: - return fErrorAddImage; - case Differencer.DELETION: - return fErrorDelImage; - } - return fErrorImage; - } - - Image getImage(Hunk hunk) { - if (hunk.fMatches) - return fNullImage; - return fErrorImage; - } - - public void createControl(Composite parent) { - - Composite composite= new Composite(parent, SWT.NULL); - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); - - WorkbenchHelp.setHelp(composite, ICompareContextIds.PATCH_PREVIEW_WIZARD_PAGE); - - setControl(composite); - - buildPatchOptionsGroup(composite); - - Splitter splitter= new Splitter(composite, SWT.VERTICAL); - splitter.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL - | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL)); - - - // top pane showing diffs and hunks in a check box tree - fTree= new Tree(splitter, SWT.CHECK | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - GridData gd= new GridData(); - gd.verticalAlignment= GridData.FILL; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.grabExcessVerticalSpace= true; - fTree.setLayoutData(gd); - - // bottom pane showing hunks in compare viewer - fHunkViewer= new CompareViewerSwitchingPane(splitter, SWT.BORDER | SWT.FLAT) { - protected Viewer getViewer(Viewer oldViewer, Object input) { - return CompareUI.findContentViewer(oldViewer, (ICompareInput)input, this, fCompareConfiguration); - } - }; - gd= new GridData(); - gd.verticalAlignment= GridData.FILL; - gd.horizontalAlignment= GridData.FILL; - gd.grabExcessHorizontalSpace= true; - gd.grabExcessVerticalSpace= true; - fHunkViewer.setLayoutData(gd); - - // register listeners - - fTree.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - TreeItem ti= (TreeItem) e.item; - Object data= e.item.getData(); - if (e.detail == SWT.CHECK) { - boolean checked= ti.getChecked(); - if (data instanceof Hunk) { - Hunk hunk= (Hunk) data; - checked= checked && hunk.fMatches; - //hunk.setEnabled(checked); - ti.setChecked(checked); - updateGrayedState(ti); - } else if (data instanceof Diff) { - updateCheckedState(ti); - } - } else { - if (data instanceof Hunk) - PreviewPatchPage.this.fHunkViewer.setInput(createInput((Hunk)data)); - else - PreviewPatchPage.this.fHunkViewer.setInput(null); - } - } - } - ); - - // creating tree's content - buildTree(); - Dialog.applyDialogFont(composite); - } - - /** - * Create the group for setting various patch options - */ - private void buildPatchOptionsGroup(Composite parent) { - - GridLayout gl; - GridData gd; - Label l; - - final Patcher patcher= fPatchWizard.getPatcher(); - - Group group= new Group(parent, SWT.NONE); - group.setText(PatchMessages.getString("PreviewPatchPage.PatchOptions.title")); //$NON-NLS-1$ - gl= new GridLayout(); gl.numColumns= 4; gl.marginHeight= 0; - group.setLayout(gl); - group.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); - - // 1st row - - Composite pair= new Composite(group, SWT.NONE); - gl= new GridLayout(); gl.numColumns= 2; gl.marginHeight= gl.marginWidth= 0; - pair.setLayout(gl); - gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); - pair.setLayoutData(gd); - - l= new Label(pair, SWT.NONE); - l.setText(PatchMessages.getString("PreviewPatchPage.IgnoreSegments.text")); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); - l.setLayoutData(gd); - - fStripPrefixSegments= new Combo(pair, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.SIMPLE); - int prefixCnt= patcher.getStripPrefixSegments(); - String prefix= Integer.toString(prefixCnt); - fStripPrefixSegments.add(prefix); - fStripPrefixSegments.setText(prefix); - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_END); - fStripPrefixSegments.setLayoutData(gd); - - addSpacer(group); - - fReversePatchButton= new Button(group, SWT.CHECK); - fReversePatchButton.setText(PatchMessages.getString("PreviewPatchPage.ReversePatch.text")); //$NON-NLS-1$ - - addSpacer(group); - - // 2nd row - pair= new Composite(group, SWT.NONE); - gl= new GridLayout(); gl.numColumns= 3; gl.marginHeight= gl.marginWidth= 0; - pair.setLayout(gl); - gd= new GridData(GridData.HORIZONTAL_ALIGN_FILL); - pair.setLayoutData(gd); - - l= new Label(pair, SWT.NONE); - l.setText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.text")); //$NON-NLS-1$ - l.setToolTipText(PatchMessages.getString("PreviewPatchPage.FuzzFactor.tooltip")); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL); - l.setLayoutData(gd); - - fFuzzField= new Text(pair, SWT.BORDER); - fFuzzField.setText("2"); //$NON-NLS-1$ - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER | GridData.HORIZONTAL_ALIGN_END); gd.widthHint= 30; - fFuzzField.setLayoutData(gd); - - Button b= new Button(pair, SWT.PUSH); - b.setText(PatchMessages.getString("PreviewPatchPage.GuessFuzz.text")); //$NON-NLS-1$ - b.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - int fuzz= guessFuzzFactor(patcher); - if (fuzz >= 0) - fFuzzField.setText(Integer.toString(fuzz)); - } - } - ); - gd= new GridData(GridData.VERTICAL_ALIGN_CENTER); - b.setLayoutData(gd); - - addSpacer(group); - - fIgnoreWhitespaceButton= new Button(group, SWT.CHECK); - fIgnoreWhitespaceButton.setText(PatchMessages.getString("PreviewPatchPage.IgnoreWhitespace.text")); //$NON-NLS-1$ - - addSpacer(group); - - // register listeners - - if (fStripPrefixSegments != null) - fStripPrefixSegments.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setStripPrefixSegments(getStripPrefixSegments())) - updateTree(); - } - } - ); - fReversePatchButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setReversed(fReversePatchButton.getSelection())) - updateTree(); - } - } - ); - fIgnoreWhitespaceButton.addSelectionListener( - new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (patcher.setIgnoreWhitespace(fIgnoreWhitespaceButton.getSelection())) - updateTree(); - } - } - ); - - fFuzzField.addModifyListener( - new ModifyListener() { - public void modifyText(ModifyEvent e) { - if (patcher.setFuzz(getFuzzFactor())) - updateTree(); - } - } - ); - } - - private int guessFuzzFactor(final Patcher patcher) { - final int strip= getStripPrefixSegments(); - final int[] result= new int[1]; - try { - TimeoutContext.run(true, GUESS_TIMEOUT, getControl().getShell(), - new IRunnableWithProgress() { - public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { - result[0]= guess(patcher, monitor, strip); - } - } - ); - return result[0]; - } catch (InvocationTargetException ex) { - // NeedWork - } catch (InterruptedException ex) { - // NeedWork - } - return -1; - } - - private int guess(Patcher patcher, IProgressMonitor pm, int strip) { - - Diff[] diffs= patcher.getDiffs(); - if (diffs == null || diffs.length <= 0) - return -1; - - // now collect files and determine "work" - IFile[] files= new IFile[diffs.length]; - int work= 0; - for (int i= 0; i < diffs.length; i++) { - Diff diff= diffs[i]; - if (diff == null) - continue; - if (diff.getType() != Differencer.ADDITION) { - IPath p= diff.fOldPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - IFile file= existsInSelection(p); - if (file != null) { - files[i]= file; - work+= diff.fHunks.size(); - } - } - } - - // do the "work" - int[] fuzzRef= new int[1]; - String format= PatchMessages.getString("PreviewPatchPage.GuessFuzzProgress.format"); //$NON-NLS-1$ - pm.beginTask(PatchMessages.getString("PreviewPatchPage.GuessFuzzProgress.text"), work); //$NON-NLS-1$ - try { - int fuzz= 0; - for (int i= 0; i < diffs.length; i++) { - Diff d= diffs[i]; - IFile file= files[i]; - if (d != null && file != null) { - List lines= patcher.load(file, false); - String name= d.getPath().lastSegment(); - Iterator iter= d.fHunks.iterator(); - int shift= 0; - for (int hcnt= 1; iter.hasNext(); hcnt++) { - pm.subTask(MessageFormat.format(format, new String[] { name, Integer.toString(hcnt) } )); - Hunk h= (Hunk) iter.next(); - shift= patcher.calculateFuzz(h, lines, shift, pm, fuzzRef); - int f= fuzzRef[0]; - if (f == -1) // cancel - return -1; - if (f > fuzz) - fuzz= f; - pm.worked(1); - } - } - } - return fuzz; - } finally { - pm.done(); - } - } - - ICompareInput createInput(Hunk hunk) { - - String[] lines= hunk.fLines; - StringBuffer left= new StringBuffer(); - StringBuffer right= new StringBuffer(); - - for (int i= 0; i < lines.length; i++) { - String line= lines[i]; - String rest= line.substring(1); - switch (line.charAt(0)) { - case ' ': - left.append(rest); - right.append(rest); - break; - case '-': - left.append(rest); - break; - case '+': - right.append(rest); - break; - } - } - - Diff diff= hunk.fParent; - IPath path= diff.getPath(); - String type= path.getFileExtension(); - - return new DiffNode(new HunkInput(type, left.toString()), new HunkInput(type, right.toString())); - } - - /** - * Builds a tree from list of Diffs. - * As a side effect it calculates the maximum number of segments - * in all paths. - */ - private void buildTree() { - setPageComplete(true); - if (fTree != null && !fTree.isDisposed()) { - fTree.removeAll(); - fHunkViewer.setInput(null); - - int length= 99; - - Diff[] diffs= fPatchWizard.getPatcher().getDiffs(); - if (diffs != null) { - for (int i= 0; i < diffs.length; i++) { - Diff diff= diffs[i]; - TreeItem d= new TreeItem(fTree, SWT.NULL); - d.setData(diff); - d.setImage(getImage(diff)); - - if (diff.fOldPath != null) - length= Math.min(length, diff.fOldPath.segmentCount()); - if (diff.fNewPath != null) - length= Math.min(length, diff.fNewPath.segmentCount()); - - java.util.List hunks= diff.fHunks; - java.util.Iterator iter= hunks.iterator(); - while (iter.hasNext()) { - Hunk hunk= (Hunk) iter.next(); - TreeItem h= new TreeItem(d, SWT.NULL); - h.setData(hunk); - h.setText(hunk.getDescription()); - } - } - } - if (fStripPrefixSegments != null && length != 99) - for (int i= 1; i < length; i++) - fStripPrefixSegments.add(Integer.toString(i)); - } - - updateTree(); - } - - private IFile existsInSelection(IPath path) { - IResource target= fPatchWizard.getTarget(); - if (target instanceof IFile) { // special case - IFile file= (IFile) target; - if (matches(file.getFullPath(), path)) - return file; - } else if (target instanceof IContainer) { - IContainer c= (IContainer) target; - if (c.exists(path)) - return c.getFile(path); - } - return null; - } - - /** - * Returns true if path completely matches the end of fullpath - */ - private boolean matches(IPath fullpath, IPath path) { - - for (IPath p= fullpath; path.segmentCount() <= p.segmentCount(); - p= p.removeFirstSegments(1)) { - if (p.equals(path)) - return true; - } - return false; - } - - /** - * Updates label and checked state of tree items. - */ - private void updateTree() { - if (fTree == null || fTree.isDisposed()) - return; - int strip= getStripPrefixSegments(); - TreeItem[] children= fTree.getItems(); - for (int i= 0; i < children.length; i++) { - TreeItem item= children[i]; - Diff diff= (Diff) item.getData(); - diff.fMatches= false; - String error= null; - - boolean create= false; - IFile file= null; - if (diff.getType() == Differencer.ADDITION) { - IPath p= diff.fNewPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - file= existsInSelection(p); - if (file == null) { - diff.fMatches= true; - } else { - // file already exists - error= PatchMessages.getString("PreviewPatchPage.FileExists.error"); //$NON-NLS-1$ - } - create= true; - } else { - IPath p= diff.fOldPath; - if (strip > 0 && strip < p.segmentCount()) - p= p.removeFirstSegments(strip); - file= existsInSelection(p); - diff.fMatches= false; - if (file != null) { - if (file.isReadOnly()) { - // file is readonly - error= PatchMessages.getString("PreviewPatchPage.FileIsReadOnly.error"); //$NON-NLS-1$ - file= null; - } else { - diff.fMatches= true; - } - } else { - // file doesn't exist - error= PatchMessages.getString("PreviewPatchPage.FileDoesNotExist.error"); //$NON-NLS-1$ - } - } - - ArrayList failedHunks= new ArrayList(); - Patcher patcher= fPatchWizard.getPatcher(); - patcher.setFuzz(getFuzzFactor()); - patcher.apply(diff, file, create, failedHunks); - - if (failedHunks.size() > 0) - diff.fRejected= fPatchWizard.getPatcher().getRejected(failedHunks); - - int checkedSubs= 0; // counts checked hunk items - TreeItem[] hunkItems= item.getItems(); - for (int h= 0; h < hunkItems.length; h++) { - Hunk hunk= (Hunk) hunkItems[h].getData(); - boolean failed= failedHunks.contains(hunk); - String hunkError= null; - if (failed) - hunkError= PatchMessages.getString("PreviewPatchPage.NoMatch.error"); //$NON-NLS-1$ - - boolean check= !failed; - hunkItems[h].setChecked(check); - if (check) - checkedSubs++; - - String hunkLabel= hunk.getDescription(); - if (hunkError != null) - hunkLabel+= " " + hunkError; //$NON-NLS-1$ - hunkItems[h].setText(hunkLabel); - hunkItems[h].setImage(getImage(hunk)); - } - - String label= diff.getDescription(strip); - if (error != null) - label+= " " + error; //$NON-NLS-1$ - item.setText(label); - item.setImage(getImage(diff)); - item.setChecked(checkedSubs > 0); - boolean gray= (checkedSubs > 0 && checkedSubs < hunkItems.length); - item.setGrayed(gray); - item.setExpanded(gray); - } - setPageComplete(updateModel()); - } - - /** - * Updates the gray state of the given diff and the checked state of its children. - */ - private void updateCheckedState(TreeItem diffItem) { - boolean checked= diffItem.getChecked(); - // check whether we can enable all hunks - TreeItem[] hunks= diffItem.getItems(); - int checkedCount= 0; - for (int i= 0; i < hunks.length; i++) { - Hunk hunk= (Hunk) hunks[i].getData(); - if (checked) { - if (hunk.fMatches) { - hunks[i].setChecked(true); - checkedCount++; - } - } else { - hunks[i].setChecked(false); - } - } - diffItem.setGrayed(checkedCount > 0 && checkedCount < hunks.length); - diffItem.setChecked(checkedCount > 0); - - setPageComplete(updateModel()); - } - - /** - * Updates the gray state of the given items parent. - */ - private void updateGrayedState(TreeItem hunk) { - TreeItem diff= hunk.getParentItem(); - TreeItem[] hunks= diff.getItems(); - int checked= 0; - for (int i= 0; i < hunks.length; i++) - if (hunks[i].getChecked()) - checked++; - diff.setChecked(checked > 0); - diff.setGrayed(checked > 0 && checked < hunks.length); - - setPageComplete(updateModel()); - } - - private void addSpacer(Composite parent) { - Label label= new Label(parent, SWT.NONE); - GridData gd= new GridData(GridData.FILL_HORIZONTAL); - gd.widthHint= 20; - label.setLayoutData(gd); - } - - private int getStripPrefixSegments() { - int stripPrefixSegments= 0; - if (fStripPrefixSegments != null) { - String s= fStripPrefixSegments.getText(); - try { - stripPrefixSegments= Integer.parseInt(s); - } catch(NumberFormatException ex) { - // silently ignored - } - } - return stripPrefixSegments; - } - - private int getFuzzFactor() { - int fuzzFactor= 0; - if (fFuzzField != null) { - String s= fFuzzField.getText(); - try { - fuzzFactor= Integer.parseInt(s); - } catch(NumberFormatException ex) { - // silently ignored - } - } - return fuzzFactor; - } - - public boolean updateModel() { - boolean atLeastOneIsEnabled= false; - if (fTree != null && !fTree.isDisposed()) { - TreeItem [] diffItems= fTree.getItems(); - for (int i= 0; i < diffItems.length; i++) { - TreeItem diffItem= diffItems[i]; - Object data= diffItem.getData(); - if (data instanceof Diff) { - Diff diff= (Diff) data; - boolean b= diffItem.getChecked(); - diff.setEnabled(b); - if (b) { - TreeItem [] hunkItems= diffItem.getItems(); - for (int j= 0; j < hunkItems.length; j++) { - TreeItem hunkItem= hunkItems[j]; - data= hunkItem.getData(); - if (data instanceof Hunk) { - Hunk hunk= (Hunk) data; - b= hunkItem.getChecked(); - hunk.setEnabled(b); - if (b) { - atLeastOneIsEnabled= true; - } - } - } - } - } - } - } - return atLeastOneIsEnabled; - } -} |