/**
* @author Mauricio Araya (maray[at]inf.utfsm.cl)
* @author Jorge Avarias (javarias[at]alumnos.inf.utfsm.cl)
*/
package cl.utfsm.acs.ebe;
import java.io.File;
import java.util.ArrayList;
import java.util.TreeMap;
import cl.utfsm.acs.types.AcsComplexType;
import cl.utfsm.acs.xml.XmlSeeker;
/** Error Browser and Editor Document manager. This class manages
* the XML files, and offers a EbeDocument abstraction. This class
* manages those objects in a generic form. For this, the schema file
* must be loaded, specific classes initializated, and create a document pool
* @author Mauricio Araya (maray[at]inf.utfsm.cl)
*/
public class EbeDocumentManager {
/** the list of current documents */
TreeMap<String,EbeDocument> documents;
/** The AcsError Schema class */
ErrorSchema schema;
/** Reads the schema files, setup classes and init the pool */
public EbeDocumentManager(){
ErrorBrowserEditor.log("=== Welcome to Error Browser ===");
ErrorBrowserEditor.log("\tDeveloped by ACS-UTFSM Group\n");
ErrorBrowserEditor.log("[Initializating Document Manager]");
ErrorBrowserEditor.log(" * Reading Schema file");
schema=new ErrorSchema();
ErrorBrowserEditor.log(" * Configuring Classes");
Member.setClassType((AcsComplexType)schema.getType("Member_"));
Error.setClassType(schema.getErrorSchema());
Completion.setClassType(schema.getCompletionSchema());
EbeDocument.setClassType(schema.getTypeSchema());
ErrorBrowserEditor.log(" * Initializating Document pool");
documents=new TreeMap<String,EbeDocument>();
ErrorBrowserEditor.log("[Done]");
}
/** Create a new document (a new file). This class setup the classic
* document info.
* @param path the path where the file should be
* @param name the document internal name
*/
public void newDocument(String path, String name){
EbeDocument myDoc=new EbeDocument();
myDoc.setPath(path);
myDoc.setDocumentInfo(name);
myDoc.setValue(name);
documents.put(myDoc.getValue(),myDoc);
ErrorBrowserEditor.log("[Created new document: "+name+"]");
}
/** Load the document information from the path, and creates a new doc.
* @param path the filepath to load from
*/
public void loadDocument(String path){
EbeDocument myDoc=new EbeDocument();
myDoc.setPath(path);
try {
myDoc.load();
} catch (RuntimeException e) {
ErrorBrowserEditor.log("Failed to load document " + path);
throw e;
}
documents.put(myDoc.getValue(),myDoc);
ErrorBrowserEditor.log("[Document "+path+" loaded]");
ErrorBrowserEditor.log(" * "+myDoc.getNodes().size()+" definitions loaded");
}
/** Remove a document from the manager by name.
* @param name the name to remove */
public void removeDocument(String name){
documents.remove(name);
ErrorBrowserEditor.log("[Document "+name+" removed]");
}
/** Remove all the documents from the manager */
public void removeAll(){
documents.clear();
ErrorBrowserEditor.log("[Document list cleaned]");
}
/** Permanently delete from the HD the file
* @param name the filename to remove */
public void deleteDocument(String name){
EbeDocument d=documents.get(name);
File f=new File(d.getPath());
if (f.delete()==true){
documents.remove(name);
ErrorBrowserEditor.log("[File "+name+" successfully deleted from the Hard Disk]");
}
else {
ErrorBrowserEditor.log("[ATENTION: File "+name+" *cannot* be deleted from the Hard Disk, please check permissions]");
}
}
/** Load a filelist to the manager.
* @param lst The Arraylist to load
*/
private void addFileList(ArrayList<File> lst){
ErrorBrowserEditor.log("Adding Files...");
for (File file: lst){
loadDocument(file.getAbsolutePath());
}
ErrorBrowserEditor.log("[Done]");
}
/** Add defaults directories, and load the files. */
@SuppressWarnings("unchecked")
public void addDefaults(){
ErrorBrowserEditor.log("[Adding default directories]");
XmlSeeker seeker=new XmlSeeker();
String modroot = System.getProperty("ACS.modroot");
String introot = System.getProperty("ACS.introot");
String acsroot = System.getProperty("ACS.acsroot");
seeker.addDir(modroot + File.separator + "idl");
seeker.addDir(introot + File.separator + "idl");
seeker.addDir(acsroot + File.separator + "idl");
addFileList(seeker.getXmls("Alma/ACSError ACSError.xsd"));
}
/** Add a specific directory to the manager
* @param path the directory Path.
*/
@SuppressWarnings("unchecked")
public void addDirectory(String path){
ErrorBrowserEditor.log("[Adding "+path+" directory]");
XmlSeeker seeker=new XmlSeeker();
seeker.addDir(path);
addFileList(seeker.getXmls("Alma/ACSError ACSError.xsd"));
}
/** Get the document TreeMap
* @return the documents TreeMap.
*/
public TreeMap<String,EbeDocument> getDocuments(){
return documents;
}
}