// FileManager.java // program simulates a hard disk import java.util.Vector; public class FileManager { private FileList fileList; // list of files private SectorList sectorList; // list of sectors represents the disk // constructor public FileManager() { FileList flist = new FileList(); this.setFileList( flist ); SectorList slist = new SectorList(); this.setSectorList( slist ); } // end constructor // constructor public FileManager( FileList f, SectorList s ) { setFileList( f ); setSectorList( s ); } // end constructor // set the file list public void setFileList( FileList f ) { fileList = f; } // end method setFileList // set the sector list public void setSectorList( SectorList s ) { sectorList = s; } // end method setSectorList // get sector list public SectorList getSectorList() { return sectorList; } // end method getSectorList // get the file list public FileList getFileList() { return fileList; } // end method getFileList // create the sector list which represents the hard disk public void createSectors() { Sector sector; // sector object for( int count = 1; count <= 32; count++ ) { sector = new Sector( count, true ); sectorList.insertAtBack( sector ); } // end for sectorList.setFreeSectors( sectorList.getSize() ); } // end method createSectors // create Files--takes name and number of characters in Kbytes public void createFile( String name, int num ) { File file = new File( name, num ); fileList.insertAtBack( file ); System.out.printf( "File %s created.\n", name ); } // end method createFile // save files to disk public void saveFile( String name ) { ListNode fileNode = fileList.findNode( name ); // return node in the file list File file = null; int sectorsRequired = 0; // int size = sectorList.getFreeSectors(); IGNORE THIS LINE Vector < ListNode > v = new Vector < ListNode > (); // vector object to hold sectors used // check for presence of file in the file list if( fileNode != null ) { file = ( File ) fileNode.getObject(); // data portion of file node sectorsRequired = file.getSectorsNeeded(); // sectors needed to store file if( sectorsRequired <= sectorList.getFreeSpace() ) // checks available space on disk { ListNode current = sectorList.getFirstNode(); // loop thru sector list, check if each node is available or occupied while ( current != null && sectorsRequired >= 1 ) { Sector sec = ( Sector ) current.getObject(); if( sec.getFree() ) // checks if sector is free or not { sec.setFree( false ); // change status of sector to occupied sectorsRequired--; // sectorList.setFreeSectors( size--); IGONRE THIS LINE v.add( current ); // adds node to vector that stores which sectors have file } // end if current = current.getNext(); } // end while file.setSectorsUsed( v ); // store sectors occupied in vector & set data portion of file node file.setSaved( true ); // set saved to true in data portion of file node System.out.printf( "File %s saved. File contains %d Kbytes. %d sectors used.\n", name, file.getCharacters(), v.size() ); } // end if else System.out.printf ( "Cannot save %s. %d sectors needed, %d are free.\n", name, file.getSectorsNeeded(), sectorList.getFreeSpace() ); } // end if else System.out.printf( "Cannot save %s. File not found.\n", name ); } // end method saveFile // delete a file public void deleteFile( String name ) { ListNode fileNode = fileList.findNode( name ); // find node of particular file ListNode sectorNode; if ( fileNode != null ) { // set number of characters to zero to indicate file empty File file = ( File ) fileNode.getObject(); file.setCharacters( 0 ); // read the nodes from the vector and change the sectors to indicate they are available Vector v = file.getSectorsUsed(); Sector sec; int size = v.size(); for ( int i = 0; i < size; i++ ) { sectorNode = ( ListNode ) v.remove( 0 ); sec = ( Sector ) sectorNode.getObject(); sec.setFree( true ); sectorNode.setData( sec ); } // end for file.clearSectorsUsed(); // empty the vector so that points to no sectors in list file.setSaved( false ); System.out.printf( "File %s deleted. %d sectors freed.\n", name, size ); } // end if else System.out.printf( "Cannot delete %s. File not found.\n", name ); } // end method deleteFile // print file usage report public void printReport() { System.out.println("\n"); System.out.printf( " DISK USAGE\n" ); System.out.printf( "%17s%60s\n", "Files Saved", "Sectors" ); System.out.println( "******************************************" + "***********************************" ); ListNode node; // file from current file list File file; // file object in file node Vector v; // vector object hold sectors used info Sector sec; node = fileList.getFirstNode(); while ( node != null ) { file = ( File ) node.getObject(); if( file.getSaved() ) { System.out.printf ( "%17s", file.getFileName() ); System.out.printf ( "%60s\n", file.printSectorsUsed() ); } // end if node = node.getNext(); } // end while System.out.println( "******************************************" + "***********************************" ); if ( sectorList.getFreeSpace() == 0 ) System.out.printf( "%17s%60s\n", "AVAILABLE SPACE", "No sectors free" ); else System.out.printf( "%17s%60s\n", "AVAILABLE SPACE", sectorList.sectorsAvailable() ); System.out.println("\n"); } // end method printReport // simulate creating, saving and deleting files public void fileDemo() { System.out.print ( "This program simulates the saving and deleting of files to a hard disk.\n"); System.out.print ( "The disk contains 32 sectors." + " Each sector can hold a maximum of 4 Kbytes.\n" ); System.out.print ( "The total disk space is then 128 Kbytes.\n\n" ); createSectors(); createFile( "superman.jpg", 31 ); createFile( "aquaman.jpg", 32 ); createFile( "greenlantern.jpg", 13 ); createFile( "dr.strange.jpg", 20 ); createFile( "cyclops.jpg", 27); createFile( "ironman.jpg", 16 ); createFile( "flash.jpg", 6); createFile( "daredevil.jpg", 22 ); createFile( "hulk.jpg", 17 ); createFile( "sinestro.jpg", 14 ); saveFile( "superman.jpg" ); saveFile( "aquaman.jpg" ); saveFile( "ironman.jpg" ); saveFile( "flash.jpg" ); saveFile( "greenlantern.jpg" ); saveFile( "dr.strange.jpg" ); printReport(); deleteFile( "flash.jpg" ); printReport(); saveFile( "dr.strange.jpg" ); saveFile( "cyclop.jpg" ); saveFile( "cyclops.jpg" ); printReport(); deleteFile( "dr.strange.jpg" ); printReport(); saveFile( "hulk.jpg" ); saveFile( "sinestro.jpg" ); printReport(); deleteFile( "superman.jpg" ); printReport(); saveFile( "daredevil.jpg" ); printReport(); deleteFile( "iromnan.jpg" ); deleteFile( "ironman.jpg" ); printReport(); saveFile( "dr.strange.jpg" ); printReport(); saveFile( "daredevil.jpg" ); printReport(); } // end method fileDemo } // end class FileManager