blob: fa53d60a9400b39b2a11c2b90804074906940de8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ltk.core.refactoring;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.ltk.internal.core.refactoring.RefactoringCorePlugin;
/**
* An immutable object representing an entry in the list in <code>RefactoringStatus</code>.
* A refactoring status entry consists of a severity, a message, a problem code
* (represented by a tuple(plug-in identifier and code number)), a context object and a
* generic data pointer. The context object is used to provide context information for
* the problem itself. An example context is a tuple consisting of the resource that contains
* the problem and a corresponding line number.
* <p>
* Note: this class is not intended to be extended by clients.
* </p>
*
* @since 3.0
*/
public class RefactoringStatusEntry {
/**
* A special problem code indicating that no problem code is provided. If
* <code>NO_CODE</code> is used then the plug-in identifier can be <code>
* null</code>
*/
public static final int NO_CODE= -1;
/** The severity */
private final int fSeverity;
/** The message */
private final String fMessage;
/** A plug-in specific problem code */
private final int fCode;
/** A plug-in identifier to make the problem code unique */
private final String fPluginId;
/** A context providing detailed information of where the problem occurred */
private final RefactoringStatusContext fContext;
/** A generic data pointer */
private final Object fData;
/**
* Creates a new refactoring status entry. The context is set to <code>
* null</code> the problem code is set to <code>NO_CODE</code>, the
* plug-in identifier is set to <code>null</code> and the data pointer
* is set to <code>null</code> as well.
*
* @param severity the severity
* @param msg the message
*/
public RefactoringStatusEntry(int severity, String msg) {
this(severity, msg, null);
}
/**
* Creates a new refactoring status entry. The problem code is set to <code>
* NO_CODE</code>, the plug-in identifier is set to <code>null</code> and
* the data pointer is set to <code>null</code> as well.
*
* @param severity the severity
* @param msg the message
* @param context the context. Can be <code>null</code>
*/
public RefactoringStatusEntry(int severity, String msg, RefactoringStatusContext context) {
this(severity, msg, context, null, NO_CODE, null);
}
/**
* Creates a new refactoring status entry.
*
* @param severity the severity
* @param msg the message
* @param context the context. Can be <code>null</code>
* @param pluginId the plug-in identifier. Can be <code>null</code> if argument <code>
* code</code> equals <code>NO_CODE</code>
* @param code the problem code. Must be either <code>NO_CODE</code> or equals or greater
* than zero
*/
public RefactoringStatusEntry(int severity, String msg, RefactoringStatusContext context, String pluginId, int code) {
this(severity, msg, context, pluginId, code, null);
}
/**
* Creates a new refactoring status entry.
*
* @param severity the severity
* @param msg the message
* @param context the context. Can be <code>null</code>
* @param pluginId the plug-in identifier. Can be <code>null</code> if argument <code>
* code</code> equals <code>NO_CODE</code>
* @param code the problem code. Must be either <code>NO_CODE</code> or a positive integer
* @param data application specific data
*/
public RefactoringStatusEntry(int severity, String msg, RefactoringStatusContext context, String pluginId, int code, Object data) {
Assert.isTrue(severity == RefactoringStatus.INFO || severity == RefactoringStatus.WARNING
|| severity == RefactoringStatus.ERROR || severity == RefactoringStatus.FATAL);
Assert.isNotNull(msg);
Assert.isTrue(code == NO_CODE || code >= 0);
if (code != NO_CODE) Assert.isTrue(pluginId != null);
fMessage= msg;
fSeverity= severity;
fContext= context;
fPluginId= pluginId;
fCode= code;
fData= data;
}
/**
* Returns the message of the status entry.
*
* @return the message
*/
public String getMessage() {
return fMessage;
}
/**
* Returns the severity level.
*
* @return the severity level
*
* @see RefactoringStatus#INFO
* @see RefactoringStatus#WARNING
* @see RefactoringStatus#ERROR
* @see RefactoringStatus#FATAL
*/
public int getSeverity() {
return fSeverity;
}
/**
* Returns the context which can be used to show more detailed information regarding
* this status entry in the UI. The method may return <code>null</code> indicating
* that no context is available.
*
* @return the status entry's context
*/
public RefactoringStatusContext getContext() {
return fContext;
}
/**
* Returns the plug-in identifier associated with the
* problem code. Might return <code>null</code> if the
* problem code equals <code>NO_CODE</code>.
*
* @return the plug-in identifier
*/
public String getPluginId() {
return fPluginId;
}
/**
* Returns the problem code.
*
* @return the problem code
*/
public int getCode() {
return fCode;
}
/**
* Returns the application defined entry data associated
* with the receiver, or <code>null</code> if it has not
* been set.
*
* @return the entry data
*/
public Object getData() {
return fData;
}
/**
* Returns whether the entry represents a fatal error or not.
*
* @return <code>true</code> if (severity ==<code>RefactoringStatus.FATAL</code>)
*/
public boolean isFatalError() {
return fSeverity == RefactoringStatus.FATAL;
}
/**
* Returns whether the entry represents an error or not.
*
* @return <code>true</code> if (severity ==<code>RefactoringStatus.ERROR</code>).
*/
public boolean isError() {
return fSeverity == RefactoringStatus.ERROR;
}
/**
* Returns whether the entry represents a warning or not.
*
* @return <code>true</code> if (severity ==<code>RefactoringStatus.WARNING</code>).
*/
public boolean isWarning() {
return fSeverity == RefactoringStatus.WARNING;
}
/**
* Returns whether the entry represents an information or not.
*
* @return <code>true</code> if (severity ==<code>RefactoringStatus.INFO</code>).
*/
public boolean isInfo() {
return fSeverity == RefactoringStatus.INFO;
}
/**
* Returns this refactoring status entry as an {@link IStatus}.
* <p>
* If this refactoring status entry has a severity of
* {@link RefactoringStatus#FATAL}, the returned status will have a
* severity of {@link IStatus#ERROR}, otherwise a status with severity
* corresponding to the refactoring status entry is returned. If the plugin
* id of this refactoring status entry is not defined, the plugin id
* <code>org.eclipse.ltk.core.refactoring</code> will be used in the
* returned status.
* </p>
*
* @return the corresponding status
*
* @since 3.2
*/
public IStatus toStatus() {
int statusSeverity= IStatus.ERROR;
switch (getSeverity()) {
case RefactoringStatus.OK:
statusSeverity= IStatus.OK;
break;
case RefactoringStatus.INFO:
statusSeverity= IStatus.INFO;
break;
case RefactoringStatus.WARNING:
case RefactoringStatus.ERROR:
statusSeverity= IStatus.WARNING;
break;
}
String pluginId= getPluginId();
int code= getCode();
if (pluginId == null) {
pluginId= RefactoringCorePlugin.getPluginId();
code= IStatus.ERROR;
}
return new Status(statusSeverity, pluginId, code, getMessage(), null);
}
/*
* non java-doc for debugging only
*/
public String toString() {
String contextString= fContext == null ? "<Unspecified context>" : fContext.toString(); //$NON-NLS-1$
return "\n" //$NON-NLS-1$
+ RefactoringStatus.getSeverityString(fSeverity) + ": " + fMessage + //$NON-NLS-1$
"\nContext: " + contextString + //$NON-NLS-1$
(fCode == NO_CODE ? "\ncode: none" : "\nplug-in id: " + fPluginId + "code: " + fCode) + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
"\nData: " + fData; //$NON-NLS-1$
}
}