blob: 0a81cc11553830bb1b1437cfabab18aac8937ff1 [file] [log] [blame]
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
package org.eclipse.compare.internal;
import java.io.*;
import java.util.List;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import java.text.MessageFormat;
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.util.*;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewPart;
import org.eclipse.compare.CompareConfiguration;
/**
* Convenience and utility methods.
*/
public class Utilities {
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;
}
/**
* Retrieves the value from a property change event as a boolean.
*/
public static boolean getValue(PropertyChangeEvent event, boolean dflt) {
Object newValue= event.getNewValue();
if (newValue instanceof Boolean)
return ((Boolean)newValue).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();
}
public static boolean isMotif() {
return false;
}
/**
* Returns the elements of the given selection.
* Returns an empty array if the selection is empty or if
* the given selection is not of type <code>IStructuredSelection</code>.
*
* @param selection the selection
* @return the selected elements
*/
public static Object[] toArray(ISelection selection) {
if (!(selection instanceof IStructuredSelection)) {
return new Object[0];
}
IStructuredSelection ss= (IStructuredSelection) selection;
return ss.toArray();
}
/**
* Convenience method: extract all <code>IResources</code> from given selection.
* Never returns null.
*/
public static IResource[] getResources(ISelection selection) {
List tmp= new ArrayList();
if (selection instanceof IStructuredSelection) {
Object[] s= ((IStructuredSelection)selection).toArray();
for (int i= 0; i < s.length; i++) {
Object o= s[i];
if (o instanceof IResource) {
tmp.add(o);
continue;
}
if (o instanceof IAdaptable) {
IAdaptable a= (IAdaptable) o;
Object adapter= a.getAdapter(IResource.class);
if (adapter instanceof IResource)
tmp.add(adapter);
continue;
}
}
}
return (IResource[]) tmp.toArray(new IResource[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) {
}
}
try {
bos.close();
} catch (IOException x) {
}
}
return bos.toByteArray();
}
/**
* Returns null if an error occurred.
*/
public static String readString(InputStream is) {
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));
while ((read= reader.read(part)) != -1)
buffer.append(part, 0, read);
return buffer.toString();
} catch (IOException ex) {
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException ex) {
}
}
}
return null;
}
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) {
}
}
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) {
}
}
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) {
} catch (MissingResourceException x) {
}
}
return dfltValue;
}
}