blob: 5643b70916b345e9a3358fe576ed9f1e2ffbff9a [file] [log] [blame]
package org.eclipse.wst.common.project.facet.core.internal;
import java.util.EnumSet;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.project.facet.core.IProjectFacet;
public final class ProblemLog
{
public enum ProblemCase
{
FACET_NOT_DEFINED( "facet-not-defined" ), //$NON-NLS-1$
FACET_VERSION_NOT_DEFINED( "facet-version-not-defined" ), //$NON-NLS-1$
GROUP_NOT_DEFINED( "group-not-defined" ), //$NON-NLS-1$
RUNTIME_COMPONENT_TYPE_NOT_DEFINED( "runtime-component-type-not-defined" ), //$NON-NLS-1$
RUNTIME_COMPONENT_VERSION_NOT_DEFINED( "runtime-component-version-not-defined" ); //$NON-NLS-1$
private String str;
private ProblemCase( final String str )
{
this.str = str;
}
public String toString()
{
return this.str;
}
}
public static final class Policy
{
private final EnumSet<ProblemCase> problemCases;
public Policy()
{
this.problemCases = EnumSet.allOf( ProblemCase.class );
for( ProblemCase problemCase : ProblemCase.values() )
{
this.problemCases.add( problemCase );
}
}
public static Policy createBasedOnIgnoreProblemsAttr( final IConfigurationElement element )
{
return createBasedOnIgnoreProblemsAttr( element, DEFAULT_POLICY );
}
public static Policy createBasedOnIgnoreProblemsAttr( final IConfigurationElement element,
final Policy defaultProblemLoggingPolicy )
{
final String enabledWhenAttrValue = element.getAttribute( "ignore-problems" ); //$NON-NLS-1$
if( enabledWhenAttrValue == null )
{
return defaultProblemLoggingPolicy;
}
else
{
final Policy policy = new Policy();
for( String segment : enabledWhenAttrValue.split( "," ) ) //$NON-NLS-1$
{
segment = segment.trim();
boolean knownCase = false;
if( segment.equalsIgnoreCase( NOT_DEFINED_WILDCARD ) )
{
policy.problemCases.remove( ProblemCase.FACET_NOT_DEFINED );
policy.problemCases.remove( ProblemCase.FACET_VERSION_NOT_DEFINED );
policy.problemCases.remove( ProblemCase.GROUP_NOT_DEFINED );
policy.problemCases.remove( ProblemCase.RUNTIME_COMPONENT_TYPE_NOT_DEFINED );
policy.problemCases.remove( ProblemCase.RUNTIME_COMPONENT_VERSION_NOT_DEFINED );
knownCase = true;
}
else
{
for( ProblemCase problemCase : ProblemCase.values() )
{
if( segment.equalsIgnoreCase( problemCase.toString() ) )
{
policy.problemCases.remove( problemCase );
knownCase = true;
break;
}
}
}
if( ! knownCase )
{
final String msg
= NLS.bind( Resources.problemCaseNotRecognized, segment ) +
NLS.bind( Resources.usedInPlugin, element.getContributor().getName() );
FacetCorePlugin.logWarning( msg, true );
}
}
return policy;
}
}
public boolean isLoggingEnabled( final ProblemCase problemCase )
{
return this.problemCases.contains( problemCase );
}
}
private static final String NOT_DEFINED_WILDCARD = "not-defined"; //$NON-NLS-1$
public static final Policy DEFAULT_POLICY = new Policy();
public static void reportMissingFacet( final String fid,
final String plugin )
{
reportMissingFacet( fid, plugin, DEFAULT_POLICY );
}
public static void reportMissingFacet( final String fid,
final String plugin,
final Policy policy )
{
if( policy.isLoggingEnabled( ProblemCase.FACET_NOT_DEFINED ) )
{
final String msg
= NLS.bind( Resources.facetNotDefined, fid ) +
NLS.bind( Resources.usedInPlugin, plugin );
FacetCorePlugin.logError( msg, true );
}
}
public static void reportMissingFacetVersion( final IProjectFacet facet,
final String version,
final String plugin )
{
reportMissingFacetVersion( facet, version, plugin, DEFAULT_POLICY );
}
public static void reportMissingFacetVersion( final IProjectFacet facet,
final String version,
final String plugin,
final Policy policy )
{
if( policy.isLoggingEnabled( ProblemCase.FACET_VERSION_NOT_DEFINED ) )
{
final String msg
= NLS.bind( Resources.facetVersionNotDefined, facet.getId(), version ) +
NLS.bind( Resources.usedInPlugin, plugin );
FacetCorePlugin.logError( msg, true );
}
}
public static void reportMissingGroup( final String groupId,
final String pluginId )
{
reportMissingGroup( groupId, pluginId, DEFAULT_POLICY );
}
public static void reportMissingGroup( final String groupId,
final String pluginId,
final Policy policy )
{
if( policy.isLoggingEnabled( ProblemCase.GROUP_NOT_DEFINED ) )
{
final String msg
= NLS.bind( Resources.groupNotDefined, groupId ) +
NLS.bind( Resources.usedInPlugin, pluginId );
FacetCorePlugin.logError( msg, true );
}
}
public static void reportMissingRuntimeComponentType( final String rct,
final String plugin )
{
reportMissingRuntimeComponentType( rct, plugin, DEFAULT_POLICY );
}
public static void reportMissingRuntimeComponentType( final String rct,
final String plugin,
final Policy policy )
{
if( policy.isLoggingEnabled( ProblemCase.RUNTIME_COMPONENT_TYPE_NOT_DEFINED ) )
{
final String msg
= NLS.bind( Resources.runtimeComponentTypeNotDefined, rct ) +
NLS.bind( Resources.usedInPlugin, plugin );
FacetCorePlugin.logError( msg, true );
}
}
private static final class Resources
extends NLS
{
public static String problemCaseNotRecognized;
public static String facetNotDefined;
public static String facetVersionNotDefined;
public static String groupNotDefined;
public static String runtimeComponentTypeNotDefined;
public static String usedInPlugin;
static
{
initializeMessages( FacetedProjectFrameworkImpl.class.getName(),
Resources.class );
}
}
}