com.powsybl.afs.Project Maven / Gradle / Ivy
/**
* Copyright (c) 2017, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.powsybl.afs;
import com.powsybl.afs.storage.NodeInfo;
import java.util.Objects;
/**
* A project is a special type of file in the file system, which represents workspace to carry out a study or computations.
*
*
* A project will have its own tree of project folders and project files, with possible dependencies between files.
*
* @author Geoffroy Jamgotchian
*/
public class Project extends File {
public static final String PSEUDO_CLASS = "project";
public static final int VERSION = 0;
public static final String ROOT_FOLDER_NAME = "root";
public Project(FileCreationContext context) {
super(context, VERSION);
}
/**
* Get the root folder of this project.
*/
public ProjectFolder getRootFolder() {
NodeInfo rootFolderInfo = storage.getChildNode(info.getId(), ROOT_FOLDER_NAME).orElseThrow(AssertionError::new);
return new ProjectFolder(new ProjectFileCreationContext(rootFolderInfo, storage, this));
}
ProjectNode createProjectNode(NodeInfo nodeInfo) {
Objects.requireNonNull(nodeInfo);
if (ProjectFolder.PSEUDO_CLASS.equals(nodeInfo.getPseudoClass())) {
return new ProjectFolder(new ProjectFileCreationContext(nodeInfo, storage, this));
} else {
return createProjectFile(nodeInfo);
}
}
ProjectFile createProjectFile(NodeInfo nodeInfo) {
Objects.requireNonNull(nodeInfo);
ProjectFileCreationContext context = new ProjectFileCreationContext(nodeInfo, storage, this);
ProjectFileExtension extension = fileSystem.getData().getProjectFileExtensionByPseudoClass(nodeInfo.getPseudoClass());
if (extension != null) {
return extension.createProjectFile(context);
} else {
return new UnknownProjectFile(context);
}
}
}