blob: 30eceef6b95d9e67f509c3b93463cc6f26d7e53e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Oracle Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.validator.model;
import java.util.Map;
/**
* IProblem is a generic self contained "marker" or "note" or "message"
* that is generated as a result of the validation pass. Instances
* of IProblem contain descriptive information about the problem
* discovered by the validator.
* <p>
* For workbench use, instances if IProblem will be adapted to IMarker.
* <p>
* For use in other places, instances of IProblem can be flushed to a
* logger, send to a console, etc.
* <p>
* The intention of the interface presented here is that it has no
* dependencies other then the java runtime and the underlying
* "validation" model to which it belongs.
*
* @author Michal Chmielewski (michal.chmielewski@oracle.com)
* @date Sep 18, 2006
*
*/
@SuppressWarnings("nls")
public interface IProblem {
/**
* Severity marker attribute. A number from the set of error, warning and info
* severities defined by the platform.
*
* @see #SEVERITY_ERROR
* @see #SEVERITY_WARNING
* @see #SEVERITY_INFO
*/
public static final String SEVERITY = "severity"; //$NON-NLS-1$
/**
* Message marker attribute. A localized string describing the nature
* of the marker (e.g., a name for a bookmark or task). The content
* and form of this attribute is not specified or interpreted by the platform.
*
* @see #getAttribute(String, String)
*/
public static final String MESSAGE = "message"; //$NON-NLS-1$
/** Message id */
public static final String MESSAGE_ID = "message.id";
/** Message arguments used to format the message */
public static final String MESSAGE_ARGS = "message.args";
/**
* Location marker attribute. The location is a human-readable (localized) string which
* can be used to distinguish between markers on a resource. As such it
* should be concise and aimed at users. The content and
* form of this attribute is not specified or interpreted by the platform.
*
* @see #getAttribute(String, String)
*/
public static final String LOCATION = "location"; //$NON-NLS-1$
/**
* Character start marker attribute. An integer value indicating where a text
* marker starts. This attribute is zero-relative and inclusive.
*
* @see #getAttribute(String, String)
*/
public static final String CHAR_START = "charStart"; //$NON-NLS-1$
/**
* Character end marker attribute. An integer value indicating where a text
* marker ends. This attribute is zero-relative and exclusive.
*
* @see #getAttribute(String, String)
*/
public static final String CHAR_END = "charEnd"; //$NON-NLS-1$
/**
* Line number marker attribute. An integer value indicating the line number
* for a text marker. This attribute is 1-relative.
*
* @see #getAttribute(String, String)
*/
public static final String LINE_NUMBER = "lineNumber"; //$NON-NLS-1$
/**
* Line number marker attribute. An integer value indicating the line number
* for a text marker. This attribute is 1-relative.
*/
public static final String COLUMN_NUMBER = "columnNumber";
/**
* The XPATH pointer into the problem node in the XML model space.
*
*/
public static final String ADDRESS_XPATH = "address.xpath";
/**
* The XPath pointer into the problem node in the model model space.
*/
public static final String ADDRESS_MODEL = "address.model";
/*====================================================================
* Marker attributes values:
*====================================================================*/
/**
* Error severity constant (value 2) indicating an error state.
*
*/
public static final int SEVERITY_ERROR = 2;
/**
* Warning severity constant (value 1) indicating a warning.
*
*/
public static final int SEVERITY_WARNING = 1;
/**
* Info severity constant (value 0) indicating information only.
*
*/
public static final int SEVERITY_INFO = 0;
/**
* The Node on which the problem is being reported.
*
*/
public static final String NODE = "node"; //$NON-NLS-1$
/**
* The fix messages, how to fix the problem.
*/
public static final String FIX = "fixMessage"; //$NON-NLS-1$
/**
* The rule name that produced this problem.
*/
public static final String RULE = "ruleName"; //$NON-NLS-1$
/**
* The description of the rule which produced this problem.
*/
public static final String RULE_DESC = "ruleDescription"; //$NON-NLS-1$
/**
* A further context associating this problem with something
* that would be useful in dereferencing the problem in the model.
*/
public static final String CONTEXT = "context.name"; //$NON-NLS-1$
/**
* In case the model is completely hoarked and we don't even have
* a Process or any sort of context, we still want to be able to
* report this as a problem. This is the emf Resource that is in error.
* @see Bugzilla 324165
*/
public static final String ERESOURCE = "eResource"; //$NON-NLS-1$
/**
* This is the name of the Java Resource bundle
* from which the fill method of IProblem will
* get the error descriptions that it will push
* into it's attributes.
* <p>
*
* For example, "org.eclipse.bpel.rules.messages"
*
*/
public static final String BUNDLE_NAME = "bundleName"; //$NON-NLS-1$
/**
* Static analysis code related to this problem in the space of the validator.
*
*/
public static final String SA_CODE = "staticAnalysisCode"; //$NON-NLS-1$
/**
* The class that we start from searching for message bundles
*/
public static final String BUNDLE_CLAZZ = "bundle.clazz";
/**
* The java exception that is to be associated with this problem.
* This is typically only used for reporting fatal code errors, for which a little
* extra help is necessary.
*
*/
public static final String EXCEPTION = "exception";
/**
* Tests this marker for equality with the given object.
* Two markers are equal if their id and resource are both equal.
*
* @param object the other object
* @return an indication of whether the objects are equal
*/
public boolean equals (Object object);
/**
* Returns the attribute with the given name. The result is an instance of one
* of the following classes: <code>String</code>, <code>Integer</code>,
* or <code>Boolean</code>.
* Returns <code>null</code> if the attribute is undefined.
*
* @param <T> the type
* @param attributeName the name of the attribute
* @return the value, or <code>null</code> if the attribute is undefined.
*/
public <T extends Object> T getAttribute (String attributeName);
/**
* Returns the attribute with the given name.
* Returns the given default value if the attribute is undefined.
* or the marker does not exist or is not an integer value.
*
* @param <T>
* @param attributeName the name of the attribute
* @param defaultValue the value to use if no value is found
* @return the value or the default value if no value was found.
*/
public <T extends Object> T getAttribute ( String attributeName, T defaultValue) ;
/**
* Returns a map with all the attributes for the marker.
* If the marker has no attributes then <code>null</code> is returned.
*
* @return a map of attribute keys and values (key type : <code>String</code>
* value type : <code>String</code>, <code>Integer</code>, or
* <code>Boolean</code>) or <code>null</code>.
*/
public Map<String,Object> getAttributes();
/**
* Returns the time at which this marker was created.
*
* @return the difference, measured in milliseconds, between the time at which
* this marker was created and midnight, January 1, 1970 UTC, or <code>0L</code>
* if the creation time is not known (this can occur in workspaces created using v2.0 or earlier).
* @since 2.1
*/
public long getCreationTime();
/**
* Returns the id of the marker. The id of a marker is unique
* relative to the resource with which the marker is associated.
* Marker IDS are not globally unique.
*
* @return the id of the marker
*/
public long getId();
/**
* Sets the attribute with the given name.
* <p>
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that this marker has been modified.
* </p>
*
* @param <T>
* @param attributeName the name of the attribute
* @param value the value
*/
public <T extends Object> void setAttribute(String attributeName, T value);
/**
* This method changes resources; these changes will be reported
* in a subsequent resource change event, including an indication
* that this marker has been modified.
* </p>
*
* @param attributes a map of attribute names to attribute values
* (key type : <code>String</code> value type : <code>String</code>,
* <code>Integer</code>, or <code>Boolean</code>) or <code>null</code>
*/
public void setAttributes(Map<String,Object> attributes);
/**
* Fill the appropriate information in the problem (attributes and such)
* that relate the message id that is passed as the argument.
* <p>
* For this to be successful, contractually at least, the property
* BUNDLE_NAME must be set in the problem prior to invoking fill().
*
* @param msgId the message id
* @param args the arguments to pass
*/
public void fill ( String msgId, Object ... args);
}