//package org.vaadin.mideaas.model;
//
//import java.io.File;
//import java.io.IOException;
//import java.nio.file.Files;
//import java.util.Collection;
//import java.util.Collections;
//import java.util.List;
//import java.util.concurrent.ExecutorService;
//import java.util.concurrent.Executors;
//
//import javax.xml.parsers.ParserConfigurationException;
//
//import org.vaadin.mideaas.java.util.InMemoryCompiler;
//import org.vaadin.chatbox.SharedChat;
//import org.vaadin.mideaas.frontend.MavenTask;
//import org.vaadin.mideaas.frontend.PomXml.Dependency;
//import org.xml.sax.SAXException;
//
//
//public class UserProject implements Project {
//
// private final User user;
// private final SharedProject shared;
// private File dir;
// private String classPath;
//
// public UserProject(User user, SharedProject shared) throws IOException {
// this.user = user;
// this.shared = shared;
// dir = createTempDir();
// ProjectFileUtils.createProjectDirs(dir, shared.getPackageName());
// ProjectFileUtils.writeInitialFilesToDisk(dir, shared.getPackageName());
// writeToDisk();
// }
//
// public User getUser() {
// return user;
// }
//
// @Override
// public File getProjectDir() {
// return dir;
// }
//
// @Override
// public File getPomXmlFile() {
// // File may not actually exist at this point. That's ok (?)
// return ProjectFileUtils.getPomXmlFile(dir);
// }
//
// @Override
// public void writeToDisk() throws IOException {
// shared.writeToDisk(dir);
// }
//
// public Collection<String> getComponentNames() {
// return shared.getComponentNames();
// }
//
// @Override
// public void addDependency(String xmlSnippet) {
// try {
// shared.addDependency(xmlSnippet);
// } catch (ParserConfigurationException | SAXException | IOException e) {
// e.printStackTrace(); // XXX
// }
//
// classPath = null;
//
// // TODO: would just need to write pom.xml
// writeToDiskNoThrow();
//
// }
//
// private boolean writeToDiskNoThrow() {
// try {
// writeToDisk();
// return true;
// } catch (IOException e) {
// System.err.println("WARNING: " + e.getMessage());
// return false;
// }
// }
//
// @Override
// public List<Dependency> getDependencies() {
// return shared.getDependencies();
// }
//
//
//
// @Override
// public String getName() {
// return shared.getName();
// }
//
// @Override
// public String getPackageName() {
// return shared.getPackageName();
// }
//
// @Override
// public boolean containsComponent(String viewName) {
// return shared.containsComponent(viewName);
// }
//
// @Override
// public SharedView getComponent(String viewName) {
// return shared.getComponent(viewName);
// }
//
// private File createTempDir() throws IOException {
// return Files.createTempDirectory("mideaas-"+getName()+"-").toFile();
// }
//
//// @Override
//// public String getClassPath() {
//// if (classPath==null) {
//// classPath = ProjectFileUtils.getClassPath(dir);
//// }
//// return classPath;
//// }
//
// public void compile() {
// if (!writeToDiskNoThrow()) {
// return;
// }
//
// // TODO ?
// MavenTask task = new MavenTask(getPomXmlFile(), Collections.singletonList("compile"));
// ExecutorService executor = Executors.newSingleThreadExecutor();
// executor.submit(task);
// executor.shutdown();
// }
//
// @Override
// public SharedView createComponent(String name) {
// return shared.createComponent(name);
// }
//
// @Override
// public void addListener(ProjectListener li) {
// shared.addListener(li);
// }
//
// @Override
// public void removeListener(ProjectListener li) {
// shared.removeListener(li);
//
// }
//
// @Override
// public InMemoryCompiler getCompiler() {
// return shared.getCompiler();
// }
//
// @Override
// public SharedChat getChat() {
// return shared.getChat();
// }
//
//}