package com.intellij.lang.javascript.flex.projectStructure.model.impl;
import com.intellij.lang.javascript.flex.FlexModuleType;
import com.intellij.lang.javascript.flex.projectStructure.model.FlexBuildConfiguration;
import com.intellij.lang.javascript.flex.projectStructure.model.FlexBuildConfigurationManager;
import com.intellij.lang.javascript.flex.projectStructure.model.ModifiableBuildConfigurationEntry;
import com.intellij.lang.javascript.flex.projectStructure.model.ModifiableDependencyEntry;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModulePointer;
import com.intellij.openapi.module.ModulePointerManager;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class BuildConfigurationEntryImpl implements ModifiableBuildConfigurationEntry, StatefulDependencyEntry {
private final DependencyTypeImpl myDependencyType = new DependencyTypeImpl();
private final ModulePointer myModulePointer;
@NotNull
private final String myBcName;
public BuildConfigurationEntryImpl(@NotNull Module module, @NotNull String bcName) {
this(ModulePointerManager.getInstance(module.getProject()).create(module), bcName);
}
public BuildConfigurationEntryImpl(@NotNull Project project, @NotNull String moduleName, @NotNull String bcName) {
this(ModulePointerManager.getInstance(project).create(moduleName), bcName);
}
public BuildConfigurationEntryImpl(ModulePointer modulePointer, @NotNull String bcName) {
myModulePointer = modulePointer;
myBcName = bcName;
}
@Override
@NotNull
public String getModuleName() {
return myModulePointer.getModuleName();
}
@NotNull
@Override
public DependencyTypeImpl getDependencyType() {
return myDependencyType;
}
@Override
@Nullable
public Module findModule() {
final Module module = myModulePointer.getModule();
return module != null && ModuleType.get(module) instanceof FlexModuleType ? module : null;
}
@Override
@Nullable
public FlexBuildConfiguration findBuildConfiguration() {
Module module = findModule();
return module != null ? FlexBuildConfigurationManager.getInstance(module).findConfigurationByName(myBcName) : null;
}
@NotNull
public String getBcName() {
return myBcName;
}
public BuildConfigurationEntryImpl getCopy() {
BuildConfigurationEntryImpl copy = new BuildConfigurationEntryImpl(myModulePointer, myBcName);
applyTo(copy);
return copy;
}
private void applyTo(ModifiableBuildConfigurationEntry copy) {
myDependencyType.applyTo(copy.getDependencyType());
}
@Override
public boolean isEqual(ModifiableDependencyEntry other) {
if (!(other instanceof BuildConfigurationEntryImpl)) return false;
if (!myBcName.equals(((BuildConfigurationEntryImpl)other).myBcName)) return false;
if (!getModuleName().equals(((BuildConfigurationEntryImpl)other).getModuleName())) return false;
if (!myDependencyType.isEqual(((BuildConfigurationEntryImpl)other).myDependencyType)) return false;
return true;
}
public EntryState getState() {
EntryState state = new EntryState();
state.MODULE_NAME = getModuleName();
state.BC_NAME = myBcName;
state.DEPENDENCY_TYPE = myDependencyType.getState();
return state;
}
}