package com.igormaznitsa.ideamindmap.lang.psi;
import com.igormaznitsa.ideamindmap.utils.IdeaUtils;
import com.igormaznitsa.mindmap.model.Extra;
import com.igormaznitsa.mindmap.model.MMapURI;
import com.igormaznitsa.mindmap.model.logger.Logger;
import com.igormaznitsa.mindmap.model.logger.LoggerFactory;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
public class PsiExtraFile extends AbstractExtraData {
private static final Logger LOGGER = LoggerFactory.getLogger(PsiExtraFile.class);
private static final Charset UTF8 = Charset.forName("UTF-8");
private volatile MMapURI uri;
public PsiExtraFile(@Nonnull final ASTNode node) {
super(node);
MMapURI theUri;
try {
theUri = new MMapURI(getName());
}
catch (URISyntaxException ex) {
theUri = null;
}
this.uri = theUri;
}
@Nullable
public MMapURI getMMapURI(){
return this.uri;
}
public void setMMapURI(@Nullable final MMapURI uri){
this.uri = uri;
}
@Nonnull
@Override
public PsiReference[] getReferences() {
return ReferenceProvidersRegistry.getReferencesFromProviders(this);
}
@Nullable
public VirtualFile findTargetFile() {
VirtualFile result = null;
if (this.uri != null) {
final Project project = getProject();
final VirtualFile baseDir = project.getBaseDir();
if (baseDir != null) {
result = VfsUtil.findFileByIoFile(this.uri.asFile(IdeaUtils.vfile2iofile(baseDir)), true);
}
}
return result;
}
@Override public Extra.ExtraType getExtraType() {
return Extra.ExtraType.FILE;
}
}