package org.erlide.engine.internal.model.root; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.erlide.engine.ErlangEngine; import org.erlide.engine.model.ErlElementKind; import org.erlide.engine.model.ErlModelException; import org.erlide.engine.model.IParent; import org.erlide.engine.model.OtpRpcFactory; import org.erlide.engine.model.root.IErlExternal; import org.erlide.engine.model.root.IErlModule; import org.erlide.engine.model.root.IErlProject; import org.erlide.engine.services.search.OpenService; import org.erlide.engine.util.CommonUtils; import org.erlide.runtime.rpc.IOtpRpc; import com.google.common.collect.Lists; public class ErlExternalReferenceEntry extends Openable implements IErlExternal { private final String entry; private final boolean prebuilt; private final boolean hasHeaders; private String group; public ErlExternalReferenceEntry(final IParent parent, final String name, final String entry, final boolean prebuilt, final boolean hasHeaders) { super(parent, name); this.entry = entry; this.prebuilt = prebuilt; this.hasHeaders = hasHeaders; } @Override public ErlElementKind getKind() { return ErlElementKind.EXTERNAL_FOLDER; } @Override public boolean isStructureKnown() { return prebuilt || super.isStructureKnown(); } @Override public boolean buildStructure(final IProgressMonitor pm) throws ErlModelException { if (prebuilt) { // already done return true; } final IErlProject project = ErlangEngine.getInstance().getModelUtilService() .getProject(this); final IOtpRpc backend = OtpRpcFactory.getOtpRpcForProject(project); if (backend != null) { final List<String> files = ErlangEngine.getInstance() .getService(OpenService.class).getLibFiles(entry); final List<IErlModule> children = Lists .newArrayListWithCapacity(files.size()); for (final String file : files) { if (CommonUtils.isErlangFileContentFileName(getName(file))) { children.add(new ErlModule(this, getName(file), file, null, null)); } } setChildren(children); return true; } return false; } private String getName(final String file) { final IPath p = new Path(file); return p.lastSegment(); } @Override public String getFilePath() { return null; } public String getExternalName() { return entry; } @Override public boolean isOTP() { final IParent parent = getParent(); if (parent instanceof IErlExternal) { final IErlExternal external = (IErlExternal) parent; return external.isOTP(); } return false; } @Override public IResource getResource() { return null; } @Override public boolean hasIncludes() { return hasHeaders; } public void setGroup(final String group) { this.group = group; } public String getGroup() { return group; } }