package eu.dnetlib.server;

import java.io.File;
import java.util.ArrayList;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

import eu.dnetlib.client.header.SavingInfoService;
import eu.dnetlib.shared.ValuesOfFields;


@SuppressWarnings("serial")
public class SavingInfoServiceImpl extends RemoteServiceServlet implements SavingInfoService{
	
		public boolean save(ValuesOfFields fieldsValuesToSave,String filename){
			
			Marshaller jaxbMarshaller;
			JAXBContext jaxbContext = null;
			try {
				File theDir = new File("/var/lib/tomcat7/webapps/uoa-stats-config-1.0-SNAPSHOT/saves");
				
				if(!theDir.exists()){
					theDir.mkdir();
				}
				
				File file = new File("/var/lib/tomcat7/webapps/uoa-stats-config-1.0-SNAPSHOT/saves/"+filename+".xml");
				jaxbContext = JAXBContext.newInstance(ValuesOfFields.class);
				jaxbMarshaller = jaxbContext.createMarshaller();
				jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
				jaxbMarshaller.marshal(fieldsValuesToSave, file);
			} catch (JAXBException e) {
				e.printStackTrace();
				return false;
			}
			
			return true;
		}

		public ValuesOfFields load(String filename){
			
			ValuesOfFields fieldsValues = new ValuesOfFields();
			 try {
				 
					File file = new File(filename);
					JAXBContext jaxbContext = JAXBContext.newInstance(ValuesOfFields.class);
					Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
					fieldsValues = (ValuesOfFields) jaxbUnmarshaller.unmarshal(file);
			 
				  } catch (JAXBException e) {
					e.printStackTrace();
				  }
			 return	fieldsValues;
					 
		}
		
		public ArrayList<String> getFileNames(){
			ArrayList<String> filenames = new ArrayList<String>();
			
			File folder = new File("/var/lib/tomcat7/webapps/uoa-stats-config-1.0-SNAPSHOT/saves/");
			File[] listOfFiles = folder.listFiles();
				
			for(int i=0;i<listOfFiles.length;i++){
				filenames.add(listOfFiles[i].getName());
			}
		
			return filenames;
		}
		
		public void deleteFile(String filename){
			
			File file = new File(filename);
			file.delete();
		}
		
		public boolean checkFilename(String filename){
			
			File f = new File("/var/lib/tomcat7/webapps/uoa-stats-config-1.0-SNAPSHOT/saves/"+filename);
			if(f.exists() && !f.isDirectory()){
				return true;
			}else{
				return false;
			}
			
		}
}
