public void copy(int srcFileInode, int sourceDirInode) throws PermissionDeniedException {
		Inode srcInode = new Inode(srcFileInode);
		Inode targetDirInode = new Inode(this.inodeNum);
		if(Directory.isReadable(srcInode) && Directory.isWritable(targetDirInode)) {
			Inode targetInode = srcInode.duplicate();
			if(srcInode.getFileType() == 'd') {
				Directory victimDir = new Directory(srcFileInode);
				String newDirContent = "d "+String.format("%03d", targetInode.getInodeNum())+"\t.\nd "+String.format("%03d", this.inodeNum)+"\t..\n";
				targetInode.writeContent(newDirContent);
				targetInode.writeToDisk();
				Directory targetDir = new Directory(targetInode.getInodeNum());
				Iterator<Entry<Integer, DirEntry>> dirEntriesNavi = victimDir.dirContent.entrySet().iterator();
				while(dirEntriesNavi.hasNext()) {
					Map.Entry<Integer, DirEntry> pairs = (Map.Entry<Integer, DirEntry>)dirEntriesNavi.next();
					if(pairs.getValue().getName().compareTo(".") != 0 && pairs.getValue().getName().compareTo("..") != 0 )
						targetDir.copy(pairs.getKey(), srcFileInode);		
				}
			}
			else if(srcInode.getFileType() == 'r') {
				String content = srcInode.getFileContent();
				targetInode.writeContent(content);
				targetInode.writeToDisk();
			}
			Directory srcDir = new Directory(sourceDirInode);
			DirEntry srcEntry = srcDir.dirContent.get(srcFileInode);
			DirEntry tempDirEntry = new DirEntry(this.cleanseName(srcEntry.getName()), srcEntry.getType());
			this.dirContent.put(targetInode.getInodeNum(), tempDirEntry);
			this.writeToDisk();
		}
		else
			throw new PermissionDeniedException();
	}