package org.xpect.xtext.lib.setup.emf; import java.util.List; import org.xpect.XpectImport; import org.xpect.setup.ISetupInitializer; import org.xpect.setup.XpectSetupFactory; import org.xpect.setup.XpectSetupRoot; import org.xpect.state.Creates; import org.xpect.xtext.lib.setup.generic.Resource; import com.google.common.collect.Lists; @XpectSetupRoot @XpectSetupFactory @SuppressWarnings("deprecation") @XpectImport({ org.xpect.xtext.lib.setup.emf.Resource.class, ResourceSet.class, ThisResource.class, File.class, ThisFile.class }) public class ResourceSetDefaultsSetup { private List<Resource> genericResources = Lists.newArrayList(); private ResourceSet resourceSet = null; public ResourceSetDefaultsSetup(ISetupInitializer<ResourceSetDefaultsSetup> initializer) { super(); initialize(initializer); } public void add(Resource genericResource) { this.genericResources.add(genericResource); } public void add(ResourceSet resourceSet) { if (this.resourceSet != null) throw new IllegalStateException("Only one ResourceSet can be configured"); this.resourceSet = resourceSet; } protected void addThisFileIfNeeded() { for (ResourceFactory fact : this.resourceSet.getFactories()) if (fact instanceof ThisResource) return; this.resourceSet.add(new ThisResource()); } protected void convert(Resource res) { if (res instanceof org.xpect.xtext.lib.setup.generic.ThisFile) this.resourceSet.add(new org.xpect.xtext.lib.setup.emf.ThisResource((org.xpect.xtext.lib.setup.generic.ThisFile) res)); else if (res instanceof org.xpect.xtext.lib.setup.generic.File) this.resourceSet.add(new org.xpect.xtext.lib.setup.emf.Resource((org.xpect.xtext.lib.setup.generic.File) res)); else if (res instanceof org.xpect.xtext.lib.setup.generic.Folder) for (Resource child : ((org.xpect.xtext.lib.setup.generic.Folder) res).getChildren()) convert(child); else throw new IllegalStateException(); } protected ResourceSet createResourceSet() { return new ResourceSet(); } @Creates public ResourceSet getResourceSet() { return this.resourceSet; } protected void initialize(ISetupInitializer<ResourceSetDefaultsSetup> initializer) { initializer.initialize(this); if (resourceSet == null) resourceSet = createResourceSet(); for (Resource res : genericResources) convert(res); addThisFileIfNeeded(); } }