X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fproject%2FProjectManager.java;h=2cad1e430b79761c306ab5365d03cff3a14ed8da;hb=1b87930e43eb7d14068a21ed0b488f28cc6ce49b;hp=4480faac5d6cfdbab124b57162a00418d60c13c5;hpb=3d68925f513f8e31eb34dcb1fc11e70faee847e7;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/project/ProjectManager.java b/src/net/pterodactylus/jsite/project/ProjectManager.java index 4480faa..2cad1e4 100644 --- a/src/net/pterodactylus/jsite/project/ProjectManager.java +++ b/src/net/pterodactylus/jsite/project/ProjectManager.java @@ -201,9 +201,7 @@ public class ProjectManager implements PropertyChangeListener { public Project createProject() throws IOException, JSiteException { Project project = new Project(); String[] keyPair = nodeManager.generateKeyPair(); - byte[] idBytes = new byte[16]; - random.nextBytes(idBytes); - project.setId(Hex.toHex(idBytes)); + project.setId(generateId()); project.setName(""); project.setDescription(""); project.setPrivateKey(keyPair[0]); @@ -220,6 +218,28 @@ public class ProjectManager implements PropertyChangeListener { } /** + * Clones the given project and returns the clone. The clone will be + * identical in all user-exposed fields, except for the project’s + * {@link Project#getId ID}. + * + * @param project + * The project to clone + * @return The cloned project + */ + public Project cloneProject(Project project) { + Project projectClone = new Project(project); + projects.add(projectClone); + projectClone.setId(generateId()); + projectClone.addPropertyChangeListener(this); + try { + save(); + } catch (IOException ioe1) { + /* ignore. */ + } + return projectClone; + } + + /** * Removes the given project. * * @param project @@ -235,6 +255,22 @@ public class ProjectManager implements PropertyChangeListener { } // + // PRIVATE METHODS + // + + /** + * Generates a new random ID, consisting of 16 random bytes converted to a + * hexadecimal number. + * + * @return The new ID + */ + private static String generateId() { + byte[] idBytes = new byte[16]; + random.nextBytes(idBytes); + return Hex.toHex(idBytes); + } + + // // INTERFACE PropertyChangeListener //