package se.chalmers.gdcn.files; import net.tomp2p.peers.PeerAddress; import net.tomp2p.peers.PeerMapChangeListener; import se.chalmers.gdcn.hashcash.WorkerChallengesManager; import se.chalmers.gdcn.control.WorkerReputationManager; import se.chalmers.gdcn.replica.ReplicaManager; import se.chalmers.gdcn.taskbuilder.fileManagement.PathManager; import javax.crypto.SecretKey; import java.io.*; import java.security.KeyPair; import java.util.ArrayList; import java.util.HashSet; /** * Created by Niklas on 2014-04-01. */ public class DataFilesManager { private File keyPairLocation; private File replicaManagerLocation; private File secretKeyLocation; private File workerNodeManagerLocation; private File workerChallengesManagerLocation; private String filePath; private String keyFileName = "keypair"; private String replicaManagerFileName = "replicaManager"; private String secretKeyFileName = "secretKey"; private String workerNodeManagerFileName = "workerNodeManager"; private String workerChallengesManagerFileName = "workerChallengesManager"; private String testDirectory; private NeighbourFileManager neighbourFileManager; public DataFilesManager() { this(""); } public DataFilesManager(String dir) { this(dir, ""); } //Used when testing public DataFilesManager(String dir, String subpart) { PathManager.loadDefaultLocation(); testDirectory = PathManager.getSettingsPath() + dir; neighbourFileManager = new NeighbourFileManager(dir, subpart); File pathDir = new File(testDirectory); pathDir.mkdirs(); filePath = testDirectory + File.separator + subpart; keyPairLocation = new File(filePath + keyFileName); replicaManagerLocation = new File(filePath + replicaManagerFileName); secretKeyLocation = new File(filePath + secretKeyFileName); workerNodeManagerLocation = new File(filePath + workerNodeManagerFileName); workerChallengesManagerLocation = new File(filePath + workerChallengesManagerFileName); } public void deleteTestDir() { File file = new File(testDirectory); String[] files = file.list(); for(String s : files) { File f = new File(testDirectory, s); f.delete(); } file.delete(); } //KEYPAIR METHODS //********************************************\\ public void saveKeyPair(KeyPair keyPair) { ObjectOutputStream oos; try { FileOutputStream fous = new FileOutputStream(keyPairLocation); oos = new ObjectOutputStream(fous); try { oos.writeObject(keyPair); } finally { oos.close(); } } catch (IOException e) { e.printStackTrace(); } } public KeyPair getKeypair() { KeyPair keypair = null; try { FileInputStream fis = new FileInputStream(keyPairLocation); ObjectInputStream ois = new ObjectInputStream(fis); try { keypair = (KeyPair) ois.readObject(); } finally { ois.close(); } } catch (FileNotFoundException e) { } catch (ClassNotFoundException | IOException e) { e.printStackTrace(); } return keypair; } public void removeKeyFile() { keyPairLocation.delete(); } //REPLICAMANAGER METHODS //********************************************\\ public void saveReplicaManager(ReplicaManager rm) { try { FileOutputStream fous = new FileOutputStream(replicaManagerLocation); ObjectOutputStream oos = new ObjectOutputStream(fous); try { oos.writeObject(rm); } finally { oos.close(); } } catch (IOException e) { e.printStackTrace(); } } public ReplicaManager getReplicaManager() { ReplicaManager replicaManager = null; try { FileInputStream fis = new FileInputStream(replicaManagerLocation); ObjectInputStream ois = new ObjectInputStream(fis); try { replicaManager = (ReplicaManager) ois.readObject(); replicaManager.resumeTimer(); } finally { ois.close(); } } catch (FileNotFoundException e) { } catch (ClassNotFoundException | IOException e) { e.printStackTrace(); } return replicaManager; } public void removeReplicaManagerFile() { replicaManagerLocation.delete(); } //WORKERNODEMANAGER METHODS //********************************************\\ public void saveWorkerNodeManager(WorkerReputationManager wm) { try { FileOutputStream fous = new FileOutputStream(workerNodeManagerLocation); ObjectOutputStream oos = new ObjectOutputStream(fous); try { oos.writeObject(wm); } finally { oos.close(); } } catch (IOException e) { e.printStackTrace(); } } public WorkerReputationManager getWorkerNodeManager() { WorkerReputationManager workerReputationManager = null; try { FileInputStream fis = new FileInputStream(workerNodeManagerLocation); ObjectInputStream ois = new ObjectInputStream(fis); try { workerReputationManager = (WorkerReputationManager) ois.readObject(); } finally { ois.close(); } } catch (FileNotFoundException e) { } catch (ClassNotFoundException | IOException e) { e.printStackTrace(); } return workerReputationManager; } public void removeWorkerNodeManagerFile() { workerNodeManagerLocation.delete(); } //WORKERCHALLENGESMANAGER METHODS //********************************************\\ public void saveWorkerChallengesManager(WorkerChallengesManager wm) { try { FileOutputStream fous = new FileOutputStream(workerChallengesManagerLocation); ObjectOutputStream oos = new ObjectOutputStream(fous); try { oos.writeObject(wm); } finally { oos.close(); } } catch (IOException e) { e.printStackTrace(); } } public WorkerChallengesManager getWorkerChallengesManager() { WorkerChallengesManager workerChallengesManager = null; try { FileInputStream fis = new FileInputStream(workerChallengesManagerLocation); ObjectInputStream ois = new ObjectInputStream(fis); try { workerChallengesManager = (WorkerChallengesManager) ois.readObject(); } finally { ois.close(); } } catch (FileNotFoundException e) { } catch (ClassNotFoundException | IOException e) { e.printStackTrace(); } return workerChallengesManager; } public void removeWorkerChallengesManagerFile() { workerChallengesManagerLocation.delete(); } //SECRETKEY METHODS //********************************************\\ public void saveSecretKey(SecretKey secretKey) { try { FileOutputStream fous = new FileOutputStream(secretKeyLocation); ObjectOutputStream oos = new ObjectOutputStream(fous); try { oos.writeObject(secretKey); } finally { oos.close(); } } catch (IOException e) { e.printStackTrace(); } } public SecretKey getSecretKey() { SecretKey sk = null; try { FileInputStream fis = new FileInputStream(secretKeyLocation); ObjectInputStream ois = new ObjectInputStream(fis); try { sk = (SecretKey) ois.readObject(); } finally { ois.close(); } } catch (FileNotFoundException e) { } catch (ClassNotFoundException | IOException e) { e.printStackTrace(); } return sk; } public void removeSecretKeyFile() { secretKeyLocation.delete(); } //NEIGHBOURMANAGER METHODS //********************************************\\ public HashSet<PeerAddress> getFileNeighbours() { return neighbourFileManager.getFileNeighbours(); } public void removeNeighbourFile() { neighbourFileManager.deleteNeighbourFile(); } public PeerMapChangeListener getPeerMapListener() { return neighbourFileManager.getPeerMapListener(); } public ArrayList<String[]> getBootstrapNodes() { return neighbourFileManager.getBootstrapNodes(); } }