abdeen-ahmad
4/18/2018 - 1:49 PM

IO JAVA

IO Java

import oracle.jdbc.proxy.annotation.Pre;
import sun.misc.Version;

import javax.naming.ConfigurationException;
import java.io.*;
import java.lang.System;
import java.lang.reflect.Array;
import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.comparator.NameFileComparator;
import java.util.*;

public class MyProperties extends  Properties {
	Integer versionNo ;
	String versionName;

	public static void main(String[] args) throws IOException {

		MyProperties x= new MyProperties();

	}


	private static String getLastVersion2(){
		String x= "x";
		File folder = new File("src/main/resources/db/changelog/");
		File[] listOfFiles = folder.listFiles();
		Arrays.sort(listOfFiles, new Comparator<File>() {
			@Override
			public int compare(File o1, File o2) {
				int n1 = extractNumber(o1.getName());
				int n2 = extractNumber(o2.getName());
				return n1 - n2;
			}

			private int extractNumber(String name) {
				int i = 0;
				try {
					int s = name.indexOf('_')+1;
					int e = name.lastIndexOf('.');
					String number = name.substring(s, e);
					i = Integer.parseInt(number);
				} catch(Exception e) {
					i = 0; // if filename does not match the format
					// then default to 0
				}
				return i;
			}
		});
		String lastVersion = listOfFiles[listOfFiles.length-1].getName();
		int s = lastVersion.indexOf('_')+1;
		int e = lastVersion.lastIndexOf('.');
		String number = lastVersion.substring(s, e);

		return number ;
		}



	public MyProperties() throws IOException {

		FileInputStream in = new FileInputStream("src/main/resources/liquibase.properties");
 		SortedProperties props = new SortedProperties();
		props.load(in);
		in.close();
		String finalVersionName = "src/main/resources/db/changelog/db.changelog.finalVersion.xml";
		String lastVersionName="src/main/resources/db/changelog/db.changelog.rel_" +  (Integer.valueOf(getLastVersion2())+1)+ ".xml";
		File finalFile = new File(finalVersionName);
		File lastFile = new File(lastVersionName);
		if (finalFile.length() != 0) {
			lastFile.createNewFile();
			//versionName="src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())+1) + ".xml";
			//File newFile = new File(versionName);
			//newFile.createNewFile();
			//Integer newVersionNo= (Integer.valueOf(getLastVersion2())+1);
			//versionName= "src/main/resources/db/changelog/db.changelog.rel_" +newVersionNo + ".xml";
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", String.valueOf(Integer.valueOf(getLastVersion2())+2));
//			props.setProperty("outputChangeLogFile", lastVersionName);

			String createFileName = "src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())+1)  + ".xml";
			FileChannel src = new FileInputStream(finalFile).getChannel();
			FileChannel dest = new FileOutputStream(lastFile).getChannel();
			dest.transferFrom(src, 0, src.size());
			finalFile.deleteOnExit();

		}
		//finalFile.renameTo(lastFile);
		finalFile.delete();



//		String newVersionName="src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())+1) + ".xml";
//		String currVersionName="src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())) + ".xml";
//		String preVersionName="src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())-1) + ".xml";
//		File newFile = new File(newVersionName);
//		File currFile = new File(currVersionName);
//		File preFile = new File(preVersionName);
//		newFile.createNewFile();
//
//		if(newFile.length() == 0 && currFile.length()==0){
//			newFile.delete();
//			versionNo= (Integer.valueOf(getLastVersion2())+1);
//			versionName= newVersionName;
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", versionNo.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//		}
//		else if (newFile.length() == 0 && currFile.length()!=0){
//			versionNo= (Integer.valueOf(getLastVersion2())+1);
//			versionName= "src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())+1) + ".xml";;
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", versionNo.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//		}

//		versionName="src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())+1) + ".xml";
//		File newFile = new File(versionName);
//		newFile.createNewFile();
//		Integer newVersionNo= (Integer.valueOf(getLastVersion2())+1);
//		versionName= "src/main/resources/db/changelog/db.changelog.rel_" +newVersionNo + ".xml";
//		props.remove("outputChangeLogFile");
//		props.remove("versionNo");
//		props.setProperty("versionNo", newVersionNo.toString());
//		props.setProperty("outputChangeLogFile", versionName);
//		File preFile = new File("src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())-1) + ".xml");
//		if(preFile.length() == 0){
//			newFile.delete();
//			Integer newVersionNo2= (Integer.valueOf(getLastVersion2()));
//			versionName= "src/main/resources/db/changelog/db.changelog.rel_" +newVersionNo2 + ".xml";
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", newVersionNo2.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//		}
//
//		String check = "src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(getLastVersion2())) + ".xml";
//		File checkFile = new File(check);
//		if (checkFile.length() == 0){
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", (Integer.valueOf(getLastVersion2())).toString());
//			props.setProperty("outputChangeLogFile", versionName);
//		}

//		versionName="src/main/resources/db/changelog/db.changelog.rel_" + getLastVersion2() + ".xml";
//		File file = new File(versionName);
//		if (file.length() != 0){
//			Integer newVersionNo = Integer.valueOf(getLastVersion2()) + 1;
//			versionName = "src/main/resources/db/changelog/db.changelog.rel_" + newVersionNo + ".xml";
//			File newFile = new File(versionName);
//			newFile.createNewFile();
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", newVersionNo.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//		}
//		if (Integer.valueOf(getLastVersion2()) ==  Integer.valueOf(props.getProperty("versionNo")) -1){
//			Integer newVersionNo = Integer.valueOf(props.getProperty("versionNo")) + 1;
//			versionName = "src/main/resources/db/changelog/db.changelog.rel_" + newVersionNo + ".xml";
//			File newFile = new File(versionName);
//			newFile.createNewFile();
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", newVersionNo.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//		}

//		versionName="src/main/resources/db/changelog/db.changelog.rel_" + getLastVersion2() + ".xml";
//		File file = new File(versionName);
//		if (file.length() != 0){
//			Integer newVersionNo = Integer.valueOf(getLastVersion2()) + 2;
//			versionName = "src/main/resources/db/changelog/db.changelog.rel_" + newVersionNo + ".xml";
//			File newFile = new File(versionName);
//			newFile.createNewFile();
//
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", newVersionNo.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//			props.setProperty("zzzfilenameversion", getLastVersion2());
//			props.setProperty("versionNoTest", String.valueOf(newVersionNo+1));
//		}else if((file.length() != 0) || (Integer.valueOf(getLastVersion2()) ==  Integer.valueOf(props.getProperty("versionNo"))-1 )){
//			Integer version =Integer.valueOf( getLastVersion2() )+1;
//			versionName = "src/main/resources/db/changelog/db.changelog.rel_" + version + ".xml";
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", version.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//			props.setProperty("zzzfilenameversion", getLastVersion2());
//		}

//		versionName = "src/main/resources/db/changelog/db.changelog.rel_" + (props.getProperty("versionNo") + 1) + ".xml";
//		File newFile = new File(versionName);
//		newFile.createNewFile();
//		versionName="src/main/resources/db/changelog/db.changelog.rel_" + getLastVersion2() + ".xml";
//		File file = new File(versionName);
//		Integer newVersionNo = Integer.valueOf(props.getProperty("versionNo")) + 1;
//		if (file.length() != 0 || (Integer.valueOf(getLastVersion2()) == newVersionNo-2) ){
//			versionName = "src/main/resources/db/changelog/db.changelog.rel_" + newVersionNo + ".xml";
//
//			File newFile = new File(versionName);
//			if (!file.exists()){
//				file.createNewFile();
//			}
//			props.remove("outputChangeLogFile");
//			props.remove("versionNo");
//			props.setProperty("versionNo", newVersionNo.toString());
//			props.setProperty("outputChangeLogFile", versionName);
//			props.setProperty("zzzfilenameversion", getLastVersion2());
//		}else{
//			FileWriter filecreate =new FileWriter("src/main/resources/db/changelog/db.changelog.rel_" + (Integer.valueOf(props.getProperty("versionNo")) -1) + ".xml");
//		}

//		try {
//			versionNo = Integer.valueOf(props.getProperty("versionNo"));
//			//File currFile = new File(props.getProperty("outputChangeLogFile"));
//			File file = new File( versionName="src/main/resources/db/changelog/db.changelog.rel_" + (versionNo -1) + ".xml");
//				if (file.isFile()) {
//					if (file.length() != 0) {
//
//						//			if ( file.exists() && !file.isDirectory())  {
//						//versionName = "src/main/resources/db/changelog/db.changelog.rel_" + versionNo + ".xml";
//						//				props.remove("outputChangeLogFile");
//						//				props.remove("versionNo");
//						//				props.setProperty("versionNo", versionNo.toString());
//						//				props.setProperty("outputChangeLogFile", versionName);
//
//						Integer newVersionNo = Integer.valueOf(getLastVersion2()) + 1;
//						versionName = "src/main/resources/db/changelog/db.changelog.rel_" + newVersionNo + ".xml";
//						props.remove("outputChangeLogFile");
//						props.remove("versionNo");
//						props.setProperty("versionNo", newVersionNo.toString());
//						props.setProperty("outputChangeLogFile", versionName);
//						props.setProperty("zzzfilenameversion", getLastVersion2());
//						//props.setProperty("zzzfilenameversion3", getLastVersion3());
//
//					} else {
//
//					}
//				}else 	if (versionName == getLastVersion2() ) {
//					Integer newVersionNo = Integer.valueOf(getLastVersion2()) + 1;
//					versionName = "src/main/resources/db/changelog/db.changelog.rel_" + newVersionNo + ".xml";
//					props.remove("outputChangeLogFile");
//					props.remove("versionNo");
//					props.setProperty("versionNo", newVersionNo.toString());
//					props.setProperty("outputChangeLogFile", versionName);
//					props.setProperty("zzzfilenameversion", getLastVersion2());
//				}
//
//					//				Integer preVersionNo = versionNo -1;
//					//				versionName = "src/main/resources/db/changelog/db.changelog.rel_" + preVersionNo + ".xml";
//					//				props.remove("outputChangeLogFile");
//					//				props.remove("versionNo");
//					//				props.setProperty("versionNo", preVersionNo.toString());
//					//				props.setProperty("outputChangeLogFile", versionName);
//
//				}catch(Exception e){
//					e.getMessage();
//				}

//				finalFile.deleteOnExit();
				FileOutputStream out = new FileOutputStream("src/main/resources/liquibase.properties");
				props.store(out, null);
				out.close();



			}
	}

	class SortedProperties extends Properties {

		public Enumeration keys() {
			Enumeration keysEnum = super.keys();
			Vector<String> keyList = new Vector<String>();
			while (keysEnum.hasMoreElements()) {
				keyList.add((String) keysEnum.nextElement());
			}
			Collections.sort(keyList);
			return keyList.elements();
		}
	}