/*
* Copyright 2003-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jetbrains.mps.project;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import jetbrains.mps.ide.MPSCoreComponents;
import jetbrains.mps.library.BaseLibraryManager;
import jetbrains.mps.util.MacrosFactory;
import jetbrains.mps.util.PathManager;
import jetbrains.mps.vfs.FileSystem;
import jetbrains.mps.vfs.IFile;
import java.io.File;
@State(
name = "ProjectLibraryManager",
storages = @Storage("libraries.xml")
)
public class ProjectLibraryManager extends BaseLibraryManager implements ProjectComponent {
private Project myProject;
public ProjectLibraryManager(Project project, DumbService dumbService, MPSCoreComponents coreComponents) {
super(coreComponents);
myProject = project;
}
@Override
public void initComponent() {
if (!myProject.isDefault()) {
super.initComponent();
}
}
@Override
public void disposeComponent() {
if (!myProject.isDefault()) {
super.disposeComponent();
}
}
@Override
public void projectOpened() {
}
@Override
public void projectClosed() {
}
@Override
protected String addMacros(String path) {
return MacrosFactory.forProjectFile(getAnchorIFile()).shrinkPath(path);
}
@Override
protected String removeMacros(String path) {
return MacrosFactory.forProjectFile(getAnchorIFile()).expandPath(path);
}
private IFile getAnchorIFile() {
return FileSystem.getInstance().getFileByPath(getAnchorFile().getPath());
}
private File getAnchorFile() {
String projectUrl = myProject.getPresentableUrl();
if (projectUrl != null) return new File(projectUrl);
return new File(PathManager.getHomePath());
}
@Override
public String toString() {
return "ProjectLibraryManager [" + myProject.getName() + "]";
}
}