The
resource strategy registry,
org.eclipse.sirius.business.api.resource.strategy.ResourceStrategyRegistry, centralizes all behaviors related to resource used in Sirius Session that can be overridden.
The extension point
org.eclipse.sirius.resourceStrategy allows to contribute a new behavior for each
resource strategy type.
When you contribute a new
ResourceStrategy, you need to handle one or more of the
org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType by using
canHandle methods. For each type, there is one or more methods to override from
org.eclipse.sirius.business.api.resource.strategy.AbstractResourceStrategyImpl. The methods to override are documented in javadoc of each
ResourceStrategyType.
To know all behaviors that can be overridden, you must refer to
org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType.
Here is an example that ignore “*.genmodel” files as semantic model of Sirius Session.
You have to add your resource strategy contribution in the plugin.xml file.
<extension point="org.eclipse.sirius.resourceStrategy">
<resourceStrategy
class="org.eclipse.sirius.tests.unit.api.convert.TestResourceStrategyToIgnoreGenModelFile">
</resourceStrategy>
</extension>
The class references a class extending the
AbstractResourceStrategyImpl. The corresponding code is:
/**
* This class overrides AbstractResourceStrategyImpl and also ignores genmodel
* files.
*/
public class TestResourceStrategyToIgnoreGenModelFile extends AbstractResourceStrategyImpl {
@Override
public boolean isPotentialSemanticResource(URI uri) {
boolean result = super.isPotentialSemanticResource(uri);
if (result && uri != null) {
result = !"genmodel".equals(uri.fileExtension());
}
return result;
}
@Override
public boolean canHandle(URI resourceURI, ResourceStrategyType resourceStrategyType) {
return ResourceStrategyType.SEMANTIC_RESOURCE.equals(resourceStrategyType);
}
}
canHandle allows to restrict this new resource strategy to only one type (
ResourceStrategyType.SEMANTIC_RESOURCE).
isPotentialSemanticResource(URI) is overridden to also ignore genmodel.
isLoadableModel(URI, Session) is not overridden as we want to keep the default behavior for this method.