package org.angularjs.codeInsight.router;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.SmartPsiElementPointer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
/**
* @author Irina.Chernushina on 3/8/2016.
*/
public class UiRouterState {
@NotNull
private final String myName;
private String myUrl;
private String myTemplateUrl;
private boolean myHasTemplateDefined;
private String myParentName;
private List<UiView> myViews;
@Nullable private SmartPsiElementPointer<PsiElement> myPointer;
private boolean myIsAbstract;
@NotNull
private final VirtualFile myFile;
@Nullable private List<SmartPsiElementPointer<PsiElement>> myDuplicateDefinitions;
private VirtualFile myTemplateFile;
@Nullable private SmartPsiElementPointer<PsiElement> myTemplatePointer;
private boolean myGeneric;
public UiRouterState(@NotNull String name, @NotNull VirtualFile file) {
myName = name;
myFile = file;
}
@NotNull
public String getName() {
return myName;
}
public String getUrl() {
return myUrl;
}
public String getTemplateUrl() {
return myTemplateUrl;
}
public String getParentName() {
return myParentName;
}
public void setUrl(String url) {
myUrl = url;
}
public boolean isHasTemplateDefined() {
return myHasTemplateDefined;
}
public void setHasTemplateDefined(boolean hasTemplateDefined) {
myHasTemplateDefined = hasTemplateDefined;
}
public void setTemplateUrl(String templateUrl) {
myTemplateUrl = templateUrl;
}
public void setParentName(String parentName) {
myParentName = parentName;
}
public List<UiView> getViews() {
return myViews;
}
public boolean hasViews() {
return myViews != null && !myViews.isEmpty();
}
public void setViews(List<UiView> views) {
myViews = views;
}
@Nullable
public SmartPsiElementPointer<PsiElement> getPointer() {
return myPointer;
}
public void setPointer(@Nullable SmartPsiElementPointer<PsiElement> pointer) {
myPointer = pointer;
}
public boolean isAbstract() {
return myIsAbstract;
}
public void setAbstract(boolean anAbstract) {
myIsAbstract = anAbstract;
}
@NotNull
public VirtualFile getFile() {
return myFile;
}
public void addDuplicateDefinition(@NotNull final UiRouterState state) {
if (myDuplicateDefinitions == null) myDuplicateDefinitions = new ArrayList<>();
myDuplicateDefinitions.add(state.getPointer());
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UiRouterState state = (UiRouterState)o;
if (!myName.equals(state.myName)) return false;
if (myPointer != null ? !myPointer.equals(state.myPointer) : state.myPointer != null) return false;
if (!myFile.equals(state.myFile)) return false;
return true;
}
@Override
public int hashCode() {
int result = myName.hashCode();
result = 31 * result + (myPointer != null ? myPointer.hashCode() : 0);
result = 31 * result + myFile.hashCode();
return result;
}
public void setTemplateFile(VirtualFile templateFile) {
myTemplateFile = templateFile;
}
public VirtualFile getTemplateFile() {
return myTemplateFile;
}
public boolean isGeneric() {
return myGeneric;
}
public void setGeneric(boolean generic) {
myGeneric = generic;
}
@Nullable
public SmartPsiElementPointer<PsiElement> getTemplatePointer() {
return myTemplatePointer;
}
public void setTemplatePointer(@Nullable SmartPsiElementPointer<PsiElement> templatePointer) {
myTemplatePointer = templatePointer;
}
}