package org.xpect.registry;
import java.util.Collection;
import java.util.Map;
import org.apache.log4j.Logger;
import org.eclipse.emf.ecore.EPackage;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
public class EPackageInfoRegistry implements IEPackageInfo.Registry {
public static class EPackageInfo implements IEPackageInfo {
private final IExtensionInfo source;
public EPackageInfo(IExtensionInfo source) {
this.source = source;
}
public LazyClass<EPackage> getEPackage() {
String className = getEPackageClassName();
return LazyClass.create(EPackage.class, className, source);
}
public String getEPackageClassName() {
return source.getAttributeValue("class");
}
public String getGenmodel() {
return source.getAttributeValue("genModel");
}
public String getNamespaceURI() {
return source.getAttributeValue("uri");
}
public IExtensionInfo getSource() {
return source;
}
@Override
public String toString() {
return "uri=" + getNamespaceURI() + " class=" + getEPackageClassName() + " genModel=" + getGenmodel();
}
}
public static Logger LOG = Logger.getLogger(EPackageInfoRegistry.class);
public static void main(String[] args) {
System.out.println(new EPackageInfoRegistry().toString());
}
private final Map<String, IEPackageInfo> epackageInfos = ImmutableMap.copyOf(collectEPackageInfos());
private Map<String, IEPackageInfo> collectEPackageInfos() {
Map<String, IEPackageInfo> result = Maps.newHashMap();
for (IExtensionInfo ext : IExtensionInfo.Registry.INSTANCE.getExtensions("org.eclipse.emf.ecore.generated_package")) {
EPackageInfo info = new EPackageInfo(ext);
String key = info.getNamespaceURI();
IEPackageInfo conflict = result.get(key);
if (conflict != null) {
String loc1 = ((EPackageInfo) conflict).getSource().getLocation();
String loc2 = info.getSource().getLocation();
LOG.warn("namespaceURI " + key + " is already registered. File1: " + loc1 + " File2: " + loc2);
} else
result.put(key, info);
}
return result;
}
public IEPackageInfo getEPackageInfo(String namespaceURI) {
return epackageInfos.get(namespaceURI);
}
public Collection<String> getNamespaceURIs() {
return epackageInfos.keySet();
}
@Override
public String toString() {
return Joiner.on("\n").join(epackageInfos.values());
}
}