All Downloads are FREE. Search and download functionalities are using the official Maven repository.

prerna.rdf.main.MHSGenesisScheduleUpdater Maven / Gradle / Ivy

The newest version!
package prerna.rdf.main;

import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.apache.jena.vocabulary.RDF;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import prerna.engine.api.IDatabaseEngine;
import prerna.engine.api.IDatabaseEngine.ACTION_TYPE;
import prerna.engine.api.IRawSelectWrapper;
import prerna.rdf.engine.wrappers.WrapperManager;
import prerna.util.Constants;


public class MHSGenesisScheduleUpdater {

	private static final Logger classLogger = LogManager.getLogger(MHSGenesisScheduleUpdater.class);

		
//	public static void main(String[] args) throws Exception {
//		TestUtilityMethods.loadDIHelper("C:\\workspace\\Semoss_Dev\\RDF_Map.prop");
//		String engineProp = "C:\\workspace\\Semoss_Dev\\db\\LocalMasterDatabase.smss";
//		IDatabase coreEngine = new RDBMSNativeEngine();
//		coreEngine.setEngineId(Constants.LOCAL_MASTER_DB_NAME);
//		coreEngine.open(engineProp);
//		DIHelper.getInstance().setLocalProperty(Constants.LOCAL_MASTER_DB_NAME, coreEngine);
//		
//		engineProp = "C:\\workspace\\Semoss_Dev\\db\\TAP_Site_Data.smss";
//		coreEngine = new BigDataEngine();
//		coreEngine.setEngineId("TAP_Site_Data");
//		coreEngine.open(engineProp);
//		DIHelper.getInstance().setLocalProperty("TAP_Site_Data", coreEngine);
//		
//		// update site assignments
//		updateSiteToWave(coreEngine);
//		
//		// update waves to year-quarter
//		// first, delete all wave to year-quarter nodes
//		deleteWaveToYearQuarter(coreEngine);
//		// do the wave to year-quarter
//		addWaveToYearQuarter(coreEngine);
//		
//		String q = "SELECT DISTINCT ?Wave ?StartDate ?EndDate WHERE { {?Wave  } {?StartDate  } {?Wave  ?StartDate} {?EndDate  } {?Wave  ?EndDate} }";
//		IRawSelectWrapper it = WrapperManager.getInstance().getRawWrapper(coreEngine, q);
//		while(it.hasNext()) {
//			Object[] uriRow = it.next().getRawValues();
//			System.out.println("This should return " + Arrays.toString(uriRow));
//		}
//		
//		coreEngine.commit();
//	}

	private static void updateSiteToWave(IDatabaseEngine engine) {
		List updateSites = new Vector();
		updateSites.add("LEMOORE");
		updateSites.add("MOUNTAIN_HOME_AFB");
		updateSites.add("MONTEREY");
		updateSites.add("TRAVIS_AFB");
		
		List newWaves = new Vector();
		newWaves.add("1");
		newWaves.add("1");
		newWaves.add("1");
		newWaves.add("1");

		StringBuilder sb = new StringBuilder("bindings ?dcsite {");
		for(int i = 0; i < updateSites.size(); i++) {
			sb.append("()");
		}
		sb.append("}");
		
		String q = "select distinct ?wave ?rel ?dcsite where {"
				+ "{?wave a } "
				+ "{?dcsite a }"
				+ "{?wave ?rel ?dcsite} } " + sb.toString();
		
		IRawSelectWrapper it = null;
		try {
			it = WrapperManager.getInstance().getRawWrapper(engine, q);
			while(it.hasNext()) {
				Object[] uriRow = it.next().getRawValues();
				System.out.println("Delete wave to dc site " + Arrays.toString(uriRow));
				deleteRel(engine, uriRow);
			}
		} catch (Exception e) {
			classLogger.error(Constants.STACKTRACE, e);
		} finally {
			if(it != null) {
				try {
					it.close();
				} catch (IOException e) {
					classLogger.error(Constants.STACKTRACE, e);
				}
			}
		}
		
		// now add new waves for each one
		String relName = "Contains";
		for(int i = 0; i < updateSites.size(); i++) {
			String wave = newWaves.get(i);
			String dcSite = updateSites.get(i);
			
			Object[] rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = "http://health.mil/ontologies/Relation/" + relName + "/" + wave + ":" + dcSite;
			rel[2] = "http://health.mil/ontologies/Concept/DCSite/" + dcSite;
			
			System.out.println("Add wave to dc site " + Arrays.toString(rel));
			addRel(engine, rel);
			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = "http://semoss.org/ontologies/Relation/" + relName;
			rel[2] = "http://health.mil/ontologies/Concept/DCSite/" + dcSite;
			
			System.out.println("Add wave to dc site " + Arrays.toString(rel));
			addRel(engine, rel);
			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = "http://semoss.org/ontologies/Relation";
			rel[2] = "http://health.mil/ontologies/Concept/DCSite/" + dcSite;
			
			System.out.println("Add wave to dc site " + Arrays.toString(rel));
			addRel(engine, rel);
		}
	}

	private static void deleteWaveToYearQuarter(IDatabaseEngine engine) {
		String q = "select distinct ?wave ?rel ?yearquarter where {"
				+ "{?wave a } "
				+ "{?yearquarter a }"
				+ "{?wave ?rel ?yearquarter} }";
		
		IRawSelectWrapper it = null;
		try {
			it = WrapperManager.getInstance().getRawWrapper(engine, q);
			while(it.hasNext()) {
				Object[] uriRow = it.next().getRawValues();
				System.out.println("Delete wave to year quarter " + Arrays.toString(uriRow));
				deleteRel(engine, uriRow);
			}
		} catch (Exception e) {
			classLogger.error(Constants.STACKTRACE, e);
		} finally {
			if(it != null) {
				try {
					it.close();
				} catch (IOException e) {
					classLogger.error(Constants.STACKTRACE, e);
				}
			}
		}
	}
	
	private static void addWaveToYearQuarter(IDatabaseEngine coreEngine) {
		// add BeginsOn
		Map addOn = new HashMap();
		addOn.put("IOC", 	"Q4FY2016");
		addOn.put("1", 		"Q1FY2019");
		addOn.put("4", 		"Q3FY2019");
		addOn.put("5", 		"Q4FY2019");
		addOn.put("3", 		"Q2FY2019");
		addOn.put("2", 		"Q3FY2019");
		addOn.put("6", 		"Q1FY2020");
		addOn.put("8", 		"Q2FY2022");
		addOn.put("7", 		"Q4FY2021");
		addOn.put("12", 	"Q1FY2023");
		addOn.put("10", 	"Q4FY2022");
		addOn.put("9", 		"Q3FY2022");
		addOn.put("11", 	"Q4FY2022");
		addOn.put("17",		"Q2FY2021");
		addOn.put("13",		"Q3FY2020");
		addOn.put("14", 	"Q4FY2020");
		addOn.put("15", 	"Q2FY2024");
		addOn.put("18", 	"Q3FY2021");
		addOn.put("16", 	"Q1FY2021");
		addOn.put("19",		"Q2FY2023");
		addOn.put("20", 	"Q4FY2023");
		addOn.put("22", 	"Q1FY2024");
		addOn.put("21", 	"Q3FY2023");
		addOn.put("23", 	"Q2FY2024");
		processWaveYear(coreEngine, addOn, "BeginsOn");
		
		// add EndsOn
		Map endOn = new HashMap();
		endOn.put("IOC", 	"Q2FY2018");
		endOn.put("1", 		"Q3FY2019");
		endOn.put("4", 		"Q2FY2020");
		endOn.put("5", 		"Q3FY2020");
		endOn.put("3", 		"Q1FY2020");
		endOn.put("2", 		"Q2FY2020");
		endOn.put("6", 		"Q4FY2020");
		endOn.put("8", 		"Q2FY2023");
		endOn.put("7", 		"Q1FY2023");
		endOn.put("12", 	"Q1FY2024");
		endOn.put("10", 	"Q4FY2023");
		endOn.put("9", 		"Q3FY2023");
		endOn.put("11", 	"Q4FY2023");
		endOn.put("17",		"Q3FY2022");
		endOn.put("13",		"Q4FY2021");
		endOn.put("14", 	"Q1FY2022");
		endOn.put("15", 	"Q2FY2025");
		endOn.put("18", 	"Q4FY2022");
		endOn.put("16", 	"Q2FY2022");
		endOn.put("19",		"Q2FY2024");
		endOn.put("20", 	"Q3FY2024");
		endOn.put("22", 	"Q1FY2025");
		endOn.put("21", 	"Q4FY2022");
		endOn.put("23", 	"Q2FY2025");
		processWaveYear(coreEngine, endOn, "EndsOn");

	}
	
	private static void processWaveYear(IDatabaseEngine engine, Map waveToYearMap, String relName) {
		for(String wave : waveToYearMap.keySet()) {
			String yearQuarter = waveToYearMap.get(wave);
			
			// add the wave to the year quarter
			Object[] rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = "http://health.mil/ontologies/Relation/" + relName + "/" + wave + ":" + yearQuarter;
			rel[2] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			
			System.out.println("Add wave to year quarter " + Arrays.toString(rel));
			addRel(engine, rel);
			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = "http://semoss.org/ontologies/Relation/" + relName;
			rel[2] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			
			System.out.println("Add wave to year quarter " + Arrays.toString(rel));
			addRel(engine, rel);
			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = "http://semoss.org/ontologies/Relation";
			rel[2] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			
			System.out.println("Add wave to year quarter " + Arrays.toString(rel));
			addRel(engine, rel);
			
			// add wave in case it doesn't exist as a concept
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Wave/" + wave;
			rel[1] = RDF.type.toString();
			rel[2] = "http://semoss.org/ontologies/Concept/Wave";

			System.out.println("Add wave to year quarter " + Arrays.toString(rel));
			addRel(engine, rel);
			
			// add year quater in case it doesn't exist as a concept
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = RDF.type.toString();
			rel[2] = "http://semoss.org/ontologies/Concept/Year-Quarter";
			
			System.out.println("Add wave to year quarter " + Arrays.toString(rel));
			addRel(engine, rel);
			
			// add surrounding stuff
			String[] split = yearQuarter.split("FY");
			String quarter = split[0].replace("Q", "");
			String year = split[1].replace("FY", "");
			
			// add year quarter to year
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = "http://health.mil/ontologies/Relation/has/" + yearQuarter + ":" + year;
			rel[2] = "http://health.mil/ontologies/Concept/Year/" + year;
			
			System.out.println("Add year quarter to year " + Arrays.toString(rel));
			addRel(engine, rel);
			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = "http://semoss.org/ontologies/Relation/has";
			rel[2] = "http://health.mil/ontologies/Concept/Year/" + year;
			
			System.out.println("Add year quarter to year " + Arrays.toString(rel));
			addRel(engine, rel);

			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = "http://semoss.org/ontologies/Relation";
			rel[2] = "http://health.mil/ontologies/Concept/Year/" + year;
			
			System.out.println("Add year quarter to year " + Arrays.toString(rel));
			addRel(engine, rel);

			
			// add year in case it doesn't exist
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year/" + year;
			rel[1] = RDF.type.toString();
			rel[2] = "http://semoss.org/ontologies/Concept/Year";
			
			System.out.println("Add year " + Arrays.toString(rel));
			addRel(engine, rel);
			
			// add year quarter to quarter
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = "http://health.mil/ontologies/Relation/has/" + yearQuarter + ":" + year;
			rel[2] = "http://health.mil/ontologies/Concept/Quarter/" + quarter;
			
			System.out.println("Add year quarter to year " + Arrays.toString(rel));
			addRel(engine, rel);
			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = "http://semoss.org/ontologies/Relation/has";
			rel[2] = "http://health.mil/ontologies/Concept/Quarter/" + quarter;
			
			System.out.println("Add year quarter to year " + Arrays.toString(rel));
			addRel(engine, rel);

			
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Year-Quarter/" + yearQuarter;
			rel[1] = "http://semoss.org/ontologies/Relation";
			rel[2] = "http://health.mil/ontologies/Concept/Quarter/" + quarter;
			
			System.out.println("Add year quarter to year " + Arrays.toString(rel));
			addRel(engine, rel);

			
			// add quarter in case it doesn't exist
			rel = new Object[3];
			rel[0] = "http://health.mil/ontologies/Concept/Quarter/" + quarter;
			rel[1] = RDF.type.toString();
			rel[2] = "http://semoss.org/ontologies/Concept/Quarter";
			
			System.out.println("Add quarter " + Arrays.toString(rel));
			addRel(engine, rel);
		}
	}
	
	private static void deleteRel(IDatabaseEngine engine, Object[] rel) {
		Object[] del = new Object[4];
		del[0] = rel[0].toString();
		del[1] = rel[1].toString();
		del[2] = rel[2].toString();
		del[3] = true;
		engine.doAction(ACTION_TYPE.REMOVE_STATEMENT, del);
	}
	
	private static void addRel(IDatabaseEngine engine, Object[] rel) {
		Object[] del = new Object[4];
		del[0] = rel[0];
		del[1] = rel[1];
		del[2] = rel[2];
		del[3] = true;
		engine.doAction(ACTION_TYPE.ADD_STATEMENT, del);
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy