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

prerna.auth.utils.SecurityOwlCreator Maven / Gradle / Ivy

The newest version!
package prerna.auth.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import prerna.engine.api.IDatabaseEngine;
import prerna.engine.impl.owl.WriteOWLEngine;
import prerna.util.Constants;
import prerna.util.Utility;

public class SecurityOwlCreator {

	private static List conceptsRequired = new ArrayList();
	static {
		conceptsRequired.add("ENGINE");
		conceptsRequired.add("ENGINEMETA");
		conceptsRequired.add("ENGINEMETAKEYS");
		conceptsRequired.add("ENGINEPERMISSION");
		conceptsRequired.add("WORKSPACEENGINE");
		conceptsRequired.add("ASSETENGINE");
		conceptsRequired.add("INSIGHT");
		conceptsRequired.add("INSIGHTMETA");
		conceptsRequired.add("INSIGHTMETAKEYS");
		conceptsRequired.add("INSIGHTFRAMES");
		conceptsRequired.add("USERINSIGHTPERMISSION");
		conceptsRequired.add("SMSS_USER");
		conceptsRequired.add("SMSS_USER_ACCESS_KEYS");
		conceptsRequired.add("PERMISSION");
		conceptsRequired.add("PROJECT");
		conceptsRequired.add("PROJECTPERMISSION");
		conceptsRequired.add("PROJECTMETA");
		conceptsRequired.add("PROJECTMETAKEYS");
		conceptsRequired.add("PROJECTDEPENDENCIES");
		conceptsRequired.add("PASSWORD_RULES");
		conceptsRequired.add("PASSWORD_HISTORY");
		conceptsRequired.add("PASSWORD_RESET");
		conceptsRequired.add("SESSION_SHARE");
		//conceptsRequired.add("DATABASEACCESSREQUEST");
		conceptsRequired.add("ENGINEACCESSREQUEST");
		conceptsRequired.add("PROJECTACCESSREQUEST");
		conceptsRequired.add("INSIGHTACCESSREQUEST");
		
		// new group tables
		conceptsRequired.add("SMSS_GROUP");
		conceptsRequired.add("CUSTOMGROUPASSIGNMENT");
		conceptsRequired.add("GROUPENGINEPERMISSION");
		conceptsRequired.add("GROUPPROJECTPERMISSION");
		conceptsRequired.add("GROUPINSIGHTPERMISSION");
		
		conceptsRequired.add(Constants.ENGINE_METAKEYS);
		conceptsRequired.add(Constants.PROJECT_METAKEYS);
		conceptsRequired.add(Constants.INSIGHT_METAKEYS);
		
		// trusted token security
		conceptsRequired.add("TOKEN");
	}
	
	private static List relationshipsRequired = new ArrayList();
	static {
		relationshipsRequired.add(new String[] {"ENGINE", "GROUPENGINEPERMISSION", "ENGINE.ENGINEID.GROUPENGINEPERMISSION.ENGINEID"});
		relationshipsRequired.add(new String[] {"PROJECT", "GROUPPROJECTPERMISSION", "PROJECT.PROJECTID.GROUPPROJECTPERMISSION.PROJECTID"});
		relationshipsRequired.add(new String[] {"INSIGHT", "GROUPINSIGHTPERMISSION", "INSIGHT.PROJECTID.GROUPINSIGHTPERMISSION.PROJECTID"});
		relationshipsRequired.add(new String[] {"INSIGHT", "GROUPINSIGHTPERMISSION", "INSIGHT.INSIGHTID.GROUPINSIGHTPERMISSION.INSIGHTID"});
	}
	
	private IDatabaseEngine securityDb;
	
	public SecurityOwlCreator(IDatabaseEngine securityDb) {
		this.securityDb = securityDb;
	}
	
	/**
	 * Determine if we need to remake the OWL
	 * @return
	 */
	public boolean needsRemake() {
		/*
		 * This is a very simple check
		 * Just looking at the tables
		 * Not doing anything with columns but should eventually do that
		 */
		
		List cleanConcepts = new ArrayList<>();
		List concepts = securityDb.getPhysicalConcepts();
		if(concepts.isEmpty()) {
			return true;
		}
		for(String concept : concepts) {
			if(concept.equals("http://semoss.org/ontologies/Concept")) {
				continue;
			}
			String cTable = Utility.getInstanceName(concept);
			cleanConcepts.add(cTable);
		}
		
		if(!cleanConcepts.containsAll(conceptsRequired)) {
			return true;
		}
		
		{
			// dont need to keep adding a million things to this list
			// just need the latest change ...
			List props = securityDb.getPropertyUris4PhysicalUri("http://semoss.org/ontologies/Concept/SESSION_SHARE");
			if(!props.contains("http://semoss.org/ontologies/Relation/Contains/SESSION_SHARE/IS_SESSION_SHARE")) {
				return true;
			}
		}
		
		List allRelationships = securityDb.getPhysicalRelationships();
		HAS_REQUIRED_REL_LOOP : for(String[] requiredRel : relationshipsRequired) {
			for(String[] existingRel : allRelationships) {
				String c1 = Utility.getInstanceName(existingRel[0]);
				String c2 = Utility.getInstanceName(existingRel[1]);
				String relName = Utility.getInstanceName(existingRel[2]);
	
				if(c1.equals(requiredRel[0])
						&& c2.equals(requiredRel[1])
						&& relName.equals(requiredRel[2])
						) {
					continue HAS_REQUIRED_REL_LOOP;
				}
			}
			
			// if we got here, the above didn't continue the loop so we dont have this rel
			// need to remake
			return true;
		}
		
		return false;
	}
	
	/**
	 * Remake the OWL 
	 * @throws Exception 
	 */
	public void remakeOwl() throws Exception {
		try(WriteOWLEngine owlEngine = securityDb.getOWLEngineFactory().getWriteOWL()) {
			owlEngine.createEmptyOWLFile();
			// write the new OWL
			writeNewOwl(owlEngine);
		}
	}
	
	/**
	 * Method that uses the OWLER to generate a new OWL structure
	 * @param owlLocation
	 * @throws Exception 
	 */
	private void writeNewOwl(WriteOWLEngine owler) throws Exception {
		// ENGINE
		owler.addConcept("ENGINE", null, null);
		owler.addProp("ENGINE", "ENGINEID", "VARCHAR(255)");
		owler.addProp("ENGINE", "ENGINENAME", "VARCHAR(255)");
		owler.addProp("ENGINE", "GLOBAL", "BOOLEAN");
		owler.addProp("ENGINE", "DISCOVERABLE", "BOOLEAN");
		owler.addProp("ENGINE", "ENGINETYPE", "VARCHAR(255)");
		owler.addProp("ENGINE", "ENGINESUBTYPE", "VARCHAR(255)");
		owler.addProp("ENGINE", "COST", "VARCHAR(255)");
		owler.addProp("ENGINE", "CREATEDBY", "VARCHAR(255)");
		owler.addProp("ENGINE", "CREATEDBYTYPE", "VARCHAR(255)");
		owler.addProp("ENGINE", "DATECREATED", "TIMESTAMP");

		// ENGINEMETA
		owler.addConcept("ENGINEMETA", null, null);
		owler.addProp("ENGINEMETA", "ENGINEID", "VARCHAR(255)");
		owler.addProp("ENGINEMETA", "METAKEY", "VARCHAR(255)");
		owler.addProp("ENGINEMETA", "METAVALUE", "CLOB");
		owler.addProp("ENGINEMETA", "METAORDER", "INT");

		// ENGINEPERMISSION
		owler.addConcept("ENGINEPERMISSION", null, null);
		owler.addProp("ENGINEPERMISSION", "ENGINEID", "VARCHAR(255)");
		owler.addProp("ENGINEPERMISSION", "USERID", "VARCHAR(255)");
		owler.addProp("ENGINEPERMISSION", "PERMISSION", "INT");
		owler.addProp("ENGINEPERMISSION", "VISIBILITY", "BOOLEAN");
		owler.addProp("ENGINEPERMISSION", "FAVORITE", "BOOLEAN");
		owler.addProp("ENGINEPERMISSION", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("ENGINEPERMISSION", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");
		owler.addProp("ENGINEPERMISSION", "DATEADDED", "TIMESTAMP");
		owler.addProp("ENGINEPERMISSION", "ENDDATE", "TIMESTAMP");
		owler.addProp("ENGINEPERMISSION", "USAGERESTRICTION", "VARCHAR(255)");
		owler.addProp("ENGINEPERMISSION", "USAGEFREQUENCY", "VARCHAR(255)");
		owler.addProp("ENGINEPERMISSION", "MAXTOKENS", "INT");
		owler.addProp("ENGINEPERMISSION", "MAXRESPONSETIME", "DOUBLE");

		// PROJECT
		owler.addConcept("PROJECT", null, null);
		owler.addProp("PROJECT", "PROJECTID", "VARCHAR(255)");
		owler.addProp("PROJECT", "PROJECTNAME", "VARCHAR(255)");
		owler.addProp("PROJECT", "GLOBAL", "BOOLEAN");
		owler.addProp("PROJECT", "DISCOVERABLE", "BOOLEAN");
		owler.addProp("PROJECT", "TYPE", "VARCHAR(255)");
		owler.addProp("PROJECT", "COST", "VARCHAR(255)");
		owler.addProp("PROJECT", "CATALOGNAME", "VARCHAR(255)");
		owler.addProp("PROJECT", "HASPORTAL", "BOOLEAN");
		owler.addProp("PROJECT", "PORTALNAME", "VARCHAR(255)");
		owler.addProp("PROJECT", "PORTALPUBLISHED", "TIMESTAMP");
		owler.addProp("PROJECT", "PORTALPUBLISHEDUSER", "VARCHAR(255)");
		owler.addProp("PROJECT", "PORTALPUBLISHEDTYPE", "VARCHAR(255)");
		owler.addProp("PROJECT", "REACTORSCOMPILED", "TIMESTAMP");
		owler.addProp("PROJECT", "REACTORSCOMPILEDUSER", "VARCHAR(255)");
		owler.addProp("PROJECT", "REACTORSCOMPILEDTYPE", "VARCHAR(255)");
		owler.addProp("PROJECT", "CREATEDBY", "VARCHAR(255)");
		owler.addProp("PROJECT", "CREATEDBYTYPE", "VARCHAR(255)");
		owler.addProp("PROJECT", "DATECREATED", "TIMESTAMP");
		
		// PROJECTPERMISSION
		owler.addConcept("PROJECTPERMISSION", null, null);
		owler.addProp("PROJECTPERMISSION", "PROJECTID", "VARCHAR(255)");
		owler.addProp("PROJECTPERMISSION", "USERID", "VARCHAR(255)");
		owler.addProp("PROJECTPERMISSION", "PERMISSION", "INT");
		owler.addProp("PROJECTPERMISSION", "VISIBILITY", "BOOLEAN");
		owler.addProp("PROJECTPERMISSION", "FAVORITE", "BOOLEAN");
		owler.addProp("PROJECTPERMISSION", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("PROJECTPERMISSION", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");
		owler.addProp("PROJECTPERMISSION", "DATEADDED", "TIMESTAMP");
		owler.addProp("PROJECTPERMISSION", "ENDDATE", "TIMESTAMP");
		
		
		// PROJECTMETA
		owler.addConcept("PROJECTMETA", null, null);
		owler.addProp("PROJECTMETA", "PROJECTID", "VARCHAR(255)");
		owler.addProp("PROJECTMETA", "METAKEY", "VARCHAR(255)");
		owler.addProp("PROJECTMETA", "METAVALUE", "CLOB");
		owler.addProp("PROJECTMETA", "METAORDER", "INT");
		
		// PROJECTDEPENDENCIES
		owler.addConcept("PROJECTDEPENDENCIES", null, null);
		owler.addProp("PROJECTDEPENDENCIES", "PROJECTID", "VARCHAR(255)");
		owler.addProp("PROJECTDEPENDENCIES", "ENGINEID", "VARCHAR(255)");
		owler.addProp("PROJECTDEPENDENCIES", "USERID", "VARCHAR(255)");
		owler.addProp("PROJECTDEPENDENCIES", "TYPE", "VARCHAR(255)");
		owler.addProp("PROJECTDEPENDENCIES", "DATEADDED", "TIMESTAMP");

		// WORKSPACEENGINE
		owler.addConcept("WORKSPACEENGINE", null, null);
		owler.addProp("WORKSPACEENGINE", "PROJECTID", "VARCHAR(255)");
		owler.addProp("WORKSPACEENGINE", "USERID", "VARCHAR(255)");
		owler.addProp("WORKSPACEENGINE", "TYPE", "VARCHAR(255)");
		
		// ASSETENGINE
		owler.addConcept("ASSETENGINE", null, null);
		owler.addProp("ASSETENGINE", "PROJECTID", "VARCHAR(255)");
		owler.addProp("ASSETENGINE", "USERID", "VARCHAR(255)");
		owler.addProp("ASSETENGINE", "TYPE", "VARCHAR(255)");
		
		// INSIGHT
		owler.addConcept("INSIGHT", null, null);
		owler.addProp("INSIGHT", "INSIGHTID", "VARCHAR(255)");
		owler.addProp("INSIGHT", "PROJECTID", "VARCHAR(255)");
		owler.addProp("INSIGHT", "INSIGHTNAME", "VARCHAR(255)");
		owler.addProp("INSIGHT", "GLOBAL", "BOOLEAN");
		owler.addProp("INSIGHT", "EXECUTIONCOUNT", "BIGINT");
		owler.addProp("INSIGHT", "CREATEDON", "TIMESTAMP");
		owler.addProp("INSIGHT", "LASTMODIFIEDON", "TIMESTAMP");
		owler.addProp("INSIGHT", "LAYOUT", "VARCHAR(255)");
		owler.addProp("INSIGHT", "CACHEABLE", "BOOLEAN");
		owler.addProp("INSIGHT", "CACHEMINUTES", "INT");
		owler.addProp("INSIGHT", "CACHECRON", "VARCHAR(25)");
		owler.addProp("INSIGHT", "CACHEDON", "TIMESTAMP");
		owler.addProp("INSIGHT", "CACHEENCRYPT", "BOOLEAN");
		owler.addProp("INSIGHT", "RECIPE", "CLOB");
		owler.addProp("INSIGHT", "SCHEMANAME", "VARCHAR(255)");

		// USERINSIGHTPERMISSION
		owler.addConcept("USERINSIGHTPERMISSION", null, null);
		owler.addProp("USERINSIGHTPERMISSION", "INSIGHTID", "VARCHAR(255)");
		owler.addProp("USERINSIGHTPERMISSION", "USERID", "VARCHAR(255)");
		owler.addProp("USERINSIGHTPERMISSION", "PROJECTID", "VARCHAR(255)");
		owler.addProp("USERINSIGHTPERMISSION", "PERMISSION", "INT");
		owler.addProp("USERINSIGHTPERMISSION", "FAVORITE", "BOOLEAN");
		owler.addProp("USERINSIGHTPERMISSION", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("USERINSIGHTPERMISSION", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");
		owler.addProp("USERINSIGHTPERMISSION", "DATEADDED", "TIMESTAMP");
		owler.addProp("USERINSIGHTPERMISSION", "ENDDATE", "TIMESTAMP");

		// INSIGHTMETA
		owler.addConcept("INSIGHTMETA", null, null);
		owler.addProp("INSIGHTMETA", "INSIGHTID", "VARCHAR(255)");
		owler.addProp("INSIGHTMETA", "PROJECTID", "VARCHAR(255)");
		owler.addProp("INSIGHTMETA", "METAKEY", "VARCHAR(255)");
		owler.addProp("INSIGHTMETA", "METAVALUE", "CLOB");
		owler.addProp("INSIGHTMETA", "METAORDER", "INT");
		
		// INSIGHTFRAMES
		owler.addConcept("INSIGHTFRAMES", null, null);
		owler.addProp("INSIGHTFRAMES", "INSIGHTID", "VARCHAR(255)");
		owler.addProp("INSIGHTFRAMES", "PROJECTID", "VARCHAR(255)");
		owler.addProp("INSIGHTFRAMES", "TABLENAME", "VARCHAR(255)");
		owler.addProp("INSIGHTFRAMES", "TABLETYPE", "VARCHAR(255)");
		owler.addProp("INSIGHTFRAMES", "COLUMNNAME", "VARCHAR(255)");
		owler.addProp("INSIGHTFRAMES", "COLUMNTYPE", "VARCHAR(255)");
		owler.addProp("INSIGHTFRAMES", "ADDITIONALTYPE", "VARCHAR(255)");
		
		// SMSS_USER
		owler.addConcept("SMSS_USER", null, null);
		owler.addProp("SMSS_USER", "ID", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "NAME", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "EMAIL", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "TYPE", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "PASSWORD", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "SALT", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "USERNAME", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "ADMIN", "BOOLEAN");
		owler.addProp("SMSS_USER", "PUBLISHER", "BOOLEAN");
		owler.addProp("SMSS_USER", "EXPORTER", "BOOLEAN");
		owler.addProp("SMSS_USER", "DATECREATED", "TIMESTAMP");
		owler.addProp("SMSS_USER", "LASTLOGIN", "TIMESTAMP");
		owler.addProp("SMSS_USER", "LASTPASSWORDRESET", "TIMESTAMP");
		owler.addProp("SMSS_USER", "LOCKED", "BOOLEAN");
		owler.addProp("SMSS_USER", "PHONE", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "PHONEEXTENSION", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "COUNTRYCODE", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "MODELUSAGERESTRICTION", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "MODELUSAGEFREQUENCY", "VARCHAR(255)");
		owler.addProp("SMSS_USER", "MODELMAXTOKENS", "INT");
		owler.addProp("SMSS_USER", "MODELMAXRESPONSETIME", "DOUBLE");
		
		// SMSS_USER_ACCESS_KEYS
		owler.addConcept("SMSS_USER_ACCESS_KEYS", null, null);
		// TODO: DELETE ID AFTER SOME TIME, REPLACED WITH USERID ... 2023-09-19
		owler.addProp("SMSS_USER_ACCESS_KEYS", "ID", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "USERID", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "TYPE", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "ACCESSKEY", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "SECRETKEY", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "SECRETSALT", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "DATECREATED", "TIMESTAMP");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "LASTUSED", "TIMESTAMP");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "TOKENNAME", "VARCHAR(255)");
		owler.addProp("SMSS_USER_ACCESS_KEYS", "TOKENDESCRIPTION", "VARCHAR(500)");

		// TOKEN
		owler.addConcept("TOKEN", null, null);
		owler.addProp("TOKEN", "IPADDR", "VARCHAR(255)");
		owler.addProp("TOKEN", "VAL", "VARCHAR(255)");
		owler.addProp("TOKEN", "DATEADDED", "TIMESTAMP");
		owler.addProp("TOKEN", "CLIENTID", "VARCHAR(255)");
		
		// PERMISSION
		owler.addConcept("PERMISSION", null, null);
		owler.addProp("PERMISSION", "ID", "INT");
		owler.addProp("PERMISSION", "NAME", "VARCHAR(255)");
		
		// PASSWORD_RULES
		owler.addConcept("PASSWORD_RULES", null, null);
		owler.addProp("PASSWORD_RULES", "PASS_LENGTH", "INT");
		owler.addProp("PASSWORD_RULES", "REQUIRE_UPPER", "BOOLEAN");
		owler.addProp("PASSWORD_RULES", "REQUIRE_LOWER", "BOOLEAN");
		owler.addProp("PASSWORD_RULES", "REQUIRE_NUMERIC", "BOOLEAN");
		owler.addProp("PASSWORD_RULES", "REQUIRE_SPECIAL", "BOOLEAN");
		owler.addProp("PASSWORD_RULES", "EXPIRATION_DAYS", "INT");
		owler.addProp("PASSWORD_RULES", "ADMIN_RESET_EXPIRATION", "BOOLEAN");
		owler.addProp("PASSWORD_RULES", "ALLOW_USER_PASS_CHANGE", "BOOLEAN");
		owler.addProp("PASSWORD_RULES", "PASS_REUSE_COUNT", "INT");
		owler.addProp("PASSWORD_RULES", "DAYS_TO_LOCK", "INT");
		owler.addProp("PASSWORD_RULES", "DAYS_TO_LOCK_WARNING", "INT");

		// PASSWORD_HISTORY
		owler.addConcept("PASSWORD_HISTORY", null, null);
		owler.addProp("PASSWORD_HISTORY", "ID", "VARCHAR(255)");
		owler.addProp("PASSWORD_HISTORY", "USERID", "VARCHAR(255)");
		owler.addProp("PASSWORD_HISTORY", "TYPE", "VARCHAR(255)");
		owler.addProp("PASSWORD_HISTORY", "PASSWORD", "VARCHAR(255)");
		owler.addProp("PASSWORD_HISTORY", "SALT", "VARCHAR(255)");
		owler.addProp("PASSWORD_HISTORY", "DATE_ADDED", "TIMESTAMP");
		
		// PASSWORD_RESET
		owler.addConcept("PASSWORD_RESET", null, null);
		owler.addProp("PASSWORD_RESET", "EMAIL", "VARCHAR(255)");
		owler.addProp("PASSWORD_RESET", "TYPE", "VARCHAR(255)");
		owler.addProp("PASSWORD_RESET", "TOKEN", "VARCHAR(255)");
		owler.addProp("PASSWORD_RESET", "DATE_ADDED", "TIMESTAMP");
		
		// SESSION_SHARE
		owler.addConcept("SESSION_SHARE", null, null);
		owler.addProp("SESSION_SHARE", "SHARE_VAL", "VARCHAR(255)");
		owler.addProp("SESSION_SHARE", "SESSION_VAL", "VARCHAR(255)");
		owler.addProp("SESSION_SHARE", "ROUTE_VAL", "VARCHAR(255)");
		owler.addProp("SESSION_SHARE", "DATE_ADDED", "TIMESTAMP");
		owler.addProp("SESSION_SHARE", "IS_SESSION_SHARE", "BOOLEAN");
		owler.addProp("SESSION_SHARE", "IS_AUTH_SHARE", "BOOLEAN");
		owler.addProp("SESSION_SHARE", "DATE_USED", "TIMESTAMP");
		owler.addProp("SESSION_SHARE", "USE_VALID", "BOOLEAN");
		owler.addProp("SESSION_SHARE", "USERID", "VARCHAR(255)");
		owler.addProp("SESSION_SHARE", "TYPE", "VARCHAR(255)");

		// ENGINEACCESSREQUEST
		owler.addConcept("ENGINEACCESSREQUEST", null, null);
		owler.addProp("ENGINEACCESSREQUEST", "ID", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "REQUEST_USERID", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "REQUEST_TYPE", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "REQUEST_TIMESTAMP", "TIMESTAMP");
		owler.addProp("ENGINEACCESSREQUEST", "ENGINEID", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "PERMISSION", "INT");
		owler.addProp("ENGINEACCESSREQUEST", "REQUEST_REASON", "CLOB");
		owler.addProp("ENGINEACCESSREQUEST", "APPROVER_USERID", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "APPROVER_TYPE", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "APPROVER_DECISION", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "APPROVER_TIMESTAMP", "TIMESTAMP");
		owler.addProp("ENGINEACCESSREQUEST", "SUBMITTED_BY_USERID", "VARCHAR(255)");
		owler.addProp("ENGINEACCESSREQUEST", "SUBMITTED_BY_TYPE", "VARCHAR(255)");
		
		// PROJECTACCESSREQUEST 
		owler.addConcept("PROJECTACCESSREQUEST", null, null);
		owler.addProp("PROJECTACCESSREQUEST", "ID", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "REQUEST_USERID", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "REQUEST_TYPE", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "REQUEST_TIMESTAMP", "TIMESTAMP");
		owler.addProp("PROJECTACCESSREQUEST", "PROJECTID", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "PERMISSION", "INT");
		owler.addProp("PROJECTACCESSREQUEST", "REQUEST_REASON", "CLOB");
		owler.addProp("PROJECTACCESSREQUEST", "APPROVER_USERID", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "APPROVER_TYPE", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "APPROVER_DECISION", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "APPROVER_TIMESTAMP", "TIMESTAMP");
		owler.addProp("PROJECTACCESSREQUEST", "SUBMITTED_BY_USERID", "VARCHAR(255)");
		owler.addProp("PROJECTACCESSREQUEST", "SUBMITTED_BY_TYPE", "VARCHAR(255)");
		
		// INSIGHTACCESSREQUEST 
		owler.addConcept("INSIGHTACCESSREQUEST", null, null);
		owler.addProp("INSIGHTACCESSREQUEST", "ID", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "REQUEST_USERID", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "REQUEST_TYPE", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "REQUEST_TIMESTAMP", "TIMESTAMP");
		owler.addProp("INSIGHTACCESSREQUEST", "PROJECTID", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "INSIGHTID", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "PERMISSION", "INT");
		owler.addProp("INSIGHTACCESSREQUEST", "REQUEST_REASON", "CLOB");
		owler.addProp("INSIGHTACCESSREQUEST", "APPROVER_USERID", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "APPROVER_TYPE", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "APPROVER_DECISION", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "APPROVER_TIMESTAMP", "TIMESTAMP");
		owler.addProp("INSIGHTACCESSREQUEST", "SUBMITTED_BY_USERID", "VARCHAR(255)");
		owler.addProp("INSIGHTACCESSREQUEST", "SUBMITTED_BY_TYPE", "VARCHAR(255)");
		
		// joins
		owler.addRelation("ENGINE", "ENGINEMETA", "ENGINE.ENGINEID.ENGINEMETA.ENGINEID");
		owler.addRelation("ENGINE", "ENGINEPERMISSION", "ENGINE.ENGINEID.ENGINEPERMISSION.ENGINEID");
		owler.addRelation("ENGINE", "WORKSPACEENGINE", "ENGINE.ENGINEID.WORKSPACEENGINE.ENGINEID");
		
		owler.addRelation("PROJECT", "ASSETENGINE", "PROJECT.PROJECTID.ASSETENGINE.PROJECTID");
		owler.addRelation("PROJECT", "PROJECTMETA", "PROJECT.PROJECTID.PROJECTMETA.PROJECTID");
		owler.addRelation("PROJECT", "INSIGHT", "PROJECT.PROJECTID.INSIGHT.PROJECTID");
		owler.addRelation("PROJECT", "USERINSIGHTPERMISSION", "PROJECT.PROJECTID.USERINSIGHTPERMISSION.PROJECTID");
		owler.addRelation("PROJECT", "PROJECTPERMISSION", "PROJECT.PROJECTID.PROJECTPERMISSION.PROJECTID");

		owler.addRelation("INSIGHT", "USERINSIGHTPERMISSION", "INSIGHT.INSIGHTID.USERINSIGHTPERMISSION.INSIGHTID");
		owler.addRelation("INSIGHT", "USERINSIGHTPERMISSION", "INSIGHT.PROJECTID.USERINSIGHTPERMISSION.PROJECTID");

		owler.addRelation("SMSS_USER", "USERINSIGHTPERMISSION", "SMSS_USER.ID.USERINSIGHTPERMISSION.USERID");
		owler.addRelation("SMSS_USER", "ENGINEPERMISSION", "SMSS_USER.ID.ENGINEPERMISSION.USERID");
		owler.addRelation("SMSS_USER", "PROJECTPERMISSION", "SMSS_USER.ID.PROJECTPERMISSION.USERID");

		owler.addRelation("ENGINEPERMISSION", "PERMISSION", "ENGINEPERMISSION.PERMISSION.PERMISSION.ID");
		owler.addRelation("USERINSIGHTPERMISSION", "PERMISSION", "USERINSIGHTPERMISSION.PERMISSION.PERMISSION.ID");
		owler.addRelation("PROJECTPERMISSION", "PERMISSION", "PROJECTPERMISSION.PERMISSION.PERMISSION.ID");
		
		owler.addRelation("INSIGHT", "INSIGHTMETA", "INSIGHT.INSIGHTID.INSIGHTMETA.INSIGHTID");
		owler.addRelation("INSIGHT", "INSIGHTMETA", "INSIGHT.PROJECTID.INSIGHTMETA.PROJECTID");
		
		owler.addRelation("INSIGHT", "INSIGHTFRAMES", "INSIGHT.INSIGHTID.INSIGHTFRAMES.INSIGHTID");
		owler.addRelation("INSIGHT", "INSIGHTFRAMES", "INSIGHT.PROJECTID.INSIGHTFRAMES.PROJECTID");
		
		// new group details
		// SMSS_GROUP
		owler.addConcept("SMSS_GROUP", null, null);
		owler.addProp("SMSS_GROUP", "ID", "VARCHAR(255)");
		owler.addProp("SMSS_GROUP", "TYPE", "VARCHAR(255)");
		owler.addProp("SMSS_GROUP", "DESCRIPTION", "CLOB");
		owler.addProp("SMSS_GROUP", "IS_CUSTOM_GROUP", "BOOLEAN");
		owler.addProp("SMSS_GROUP", "DATEADDED", "TIMESTAMP");
		owler.addProp("SMSS_GROUP", "USERID", "VARCHAR(255)");
		owler.addProp("SMSS_GROUP", "USERIDTYPE", "VARCHAR(255)");
		
		// CUSTOMGROUPASSIGNMENT
		owler.addConcept("CUSTOMGROUPASSIGNMENT", null, null);
		owler.addProp("CUSTOMGROUPASSIGNMENT", "GROUPID", "VARCHAR(255)");
		owler.addProp("CUSTOMGROUPASSIGNMENT", "USERID", "VARCHAR(255)");
		owler.addProp("CUSTOMGROUPASSIGNMENT", "TYPE", "VARCHAR(255)");
		owler.addProp("CUSTOMGROUPASSIGNMENT", "DATEADDED", "TIMESTAMP");
		owler.addProp("CUSTOMGROUPASSIGNMENT", "ENDDATE", "TIMESTAMP");
		owler.addProp("CUSTOMGROUPASSIGNMENT", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("CUSTOMGROUPASSIGNMENT", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");
		
		// GROUPENGINEPERMISSION
		owler.addConcept("GROUPENGINEPERMISSION", null, null);
		owler.addProp("GROUPENGINEPERMISSION", "ID", "VARCHAR(255)");
		owler.addProp("GROUPENGINEPERMISSION", "TYPE", "VARCHAR(255)");
		owler.addProp("GROUPENGINEPERMISSION", "ENGINEID", "VARCHAR(255)");
		owler.addProp("GROUPENGINEPERMISSION", "PERMISSION", "INT");
		owler.addProp("GROUPENGINEPERMISSION", "DATEADDED", "TIMESTAMP");
		owler.addProp("GROUPENGINEPERMISSION", "ENDDATE", "TIMESTAMP");
		owler.addProp("GROUPENGINEPERMISSION", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("GROUPENGINEPERMISSION", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");

		// GROUPPROJECTPERMISSION
		owler.addConcept("GROUPPROJECTPERMISSION", null, null);
		owler.addProp("GROUPPROJECTPERMISSION", "ID", "VARCHAR(255)");
		owler.addProp("GROUPPROJECTPERMISSION", "TYPE", "VARCHAR(255)");
		owler.addProp("GROUPPROJECTPERMISSION", "PROJECTID", "VARCHAR(255)");
		owler.addProp("GROUPPROJECTPERMISSION", "PERMISSION", "INT");
		owler.addProp("GROUPPROJECTPERMISSION", "DATEADDED", "TIMESTAMP");
		owler.addProp("GROUPPROJECTPERMISSION", "ENDDATE", "TIMESTAMP");
		owler.addProp("GROUPPROJECTPERMISSION", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("GROUPPROJECTPERMISSION", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");
		
		// GROUPPROJECTPERMISSION
		owler.addConcept("GROUPINSIGHTPERMISSION", null, null);
		owler.addProp("GROUPINSIGHTPERMISSION", "ID", "VARCHAR(255)");
		owler.addProp("GROUPINSIGHTPERMISSION", "TYPE", "VARCHAR(255)");
		owler.addProp("GROUPINSIGHTPERMISSION", "PROJECTID", "VARCHAR(255)");
		owler.addProp("GROUPINSIGHTPERMISSION", "INSIGHTID", "VARCHAR(255)");
		owler.addProp("GROUPINSIGHTPERMISSION", "PERMISSION", "INT");
		owler.addProp("GROUPINSIGHTPERMISSION", "DATEADDED", "TIMESTAMP");
		owler.addProp("GROUPINSIGHTPERMISSION", "ENDDATE", "TIMESTAMP");
		owler.addProp("GROUPINSIGHTPERMISSION", "PERMISSIONGRANTEDBY", "VARCHAR(255)");
		owler.addProp("GROUPINSIGHTPERMISSION", "PERMISSIONGRANTEDBYTYPE", "VARCHAR(255)");
		
		// "ENGINEMETAKEYS", "PROJECTMETAKEYS", "INSIGHTMETAKEYS"
		List metaKeyTableNames = Arrays.asList(Constants.ENGINE_METAKEYS, Constants.PROJECT_METAKEYS, Constants.INSIGHT_METAKEYS);
		for(String tableName : metaKeyTableNames) {
			// all have the same columns and default values
			owler.addConcept(tableName, null, null);
			owler.addProp(tableName, "METAKEY", "VARCHAR(255)");
			owler.addProp(tableName, "SINGLEMULTI", "VARCHAR(255)");
			owler.addProp(tableName, "DISPLAYORDER", "INT");
			owler.addProp(tableName, "DISPLAYOPTIONS", "VARCHAR(255)");
			owler.addProp(tableName, "DEFAULTVALUES", "VARCHAR(500)");
		}

		owler.addRelation("SMSS_USER", "CUSTOMGROUPASSIGNMENT", "SMSS_USER.ID.CUSTOMGROUPASSIGNMENT.USERID");
		owler.addRelation("SMSS_GROUP", "CUSTOMGROUPASSIGNMENT", "SMSS_GROUP.ID.CUSTOMGROUPASSIGNMENT.GROUPID");

		owler.addRelation("SMSS_GROUP", "GROUPENGINEPERMISSION", "SMSS_GROUP.ID.GROUPENGINEPERMISSION.ID");
		owler.addRelation("SMSS_GROUP", "GROUPENGINEPERMISSION", "SMSS_GROUP.TYPE.GROUPENGINEPERMISSION.TYPE");
		owler.addRelation("ENGINE", "GROUPENGINEPERMISSION", "ENGINE.ENGINEID.GROUPENGINEPERMISSION.ENGINEID");

		owler.addRelation("SMSS_GROUP", "GROUPPROJECTPERMISSION", "SMSS_GROUP.ID.GROUPPROJECTPERMISSION.ID");
		owler.addRelation("SMSS_GROUP", "GROUPPROJECTPERMISSION", "SMSS_GROUP.TYPE.GROUPPROJECTPERMISSION.TYPE");
		owler.addRelation("PROJECT", "GROUPPROJECTPERMISSION", "PROJECT.PROJECTID.GROUPPROJECTPERMISSION.PROJECTID");

		owler.addRelation("SMSS_GROUP", "GROUPINSIGHTPERMISSION", "SMSS_GROUP.ID.GROUPINSIGHTPERMISSION.ID");
		owler.addRelation("SMSS_GROUP", "GROUPINSIGHTPERMISSION", "SMSS_GROUP.TYPE.GROUPINSIGHTPERMISSION.TYPE");
		owler.addRelation("INSIGHT", "GROUPINSIGHTPERMISSION", "INSIGHT.PROJECTID.GROUPINSIGHTPERMISSION.PROJECTID");
		owler.addRelation("INSIGHT", "GROUPINSIGHTPERMISSION", "INSIGHT.INSIGHTID.GROUPINSIGHTPERMISSION.INSIGHTID");
		
		owler.commit();
		owler.export();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy