/*
 * Created on 14-Sep-2004
 *
 * Class to hold various WSA schema related objects and SQL
 */
package uk.ac.roe.wfau;

import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import java.util.Properties;

import javax.naming.directory.SchemaViolationException;
import javax.servlet.http.HttpSession;

import net.mar.Format;

/**
 * Class to hold various WSA schema related objects and SQL
 * 
 * @author mar
 * @version 1.0
 * 
 */
public class GESSchema extends WSASchema {
	public static String CUSERVER []={"ramses1"};
	public static String WORLDGESDB [];
    public static String WORLDCOMMDB [];
    public static String WORLDVHSDB [];
    public static String WORLDVVVDB [];
    public static String WORLDVMCDB [];
    public static String WORLDVIKINGDB [];
    public static String WORLDVIDEODB [];
    public static String WORLDULTRAVISTADB [];
    public static String WORLDSVORIONDB [];
    public static String WORLDSVNGC253DB [];
    public static String WORLDCALDB [];
    public static String WORLDGCSDB [];
    public static String GESCOMMUNITYPREFIX="ges::";
    
    public static String EQUIVWORLDGESDB [];
    public static String EQUIVWORLDCOMMDB [];
    public static String EQUIVWORLDVHSDB [];
    public static String EQUIVWORLDVVVDB [];
    public static String EQUIVWORLDVMCDB [];
    public static String EQUIVWORLDVIKINGDB [];
    public static String EQUIVWORLDVIDEODB [];
    public static String EQUIVWORLDULTRAVISTADB [];
    public static String EQUIVWORLDSVORIONDB [];
    public static String EQUIVWORLDSVNGC253DB [];
    public static String EQUIVWORLDCALDB [];
    public static String EQUIVWORLDGCSDB [];
    
    static {
        LoadGESProperties.getSingletonObject();
    }
    
    
    /**
     * Offset between extension numbers held in database and what cfitsio
     * expects.
     */
    public static final String LATESTUKIDSSDATABASE = "ukidssdr5plus";// "ukidssedr";
    public static final String LATESTWORLDDATABASE = "ukidssdr3plus"; 
    public static final String [] SCEHMAVALIDDATABASES={"ukidssdr5plus","ukidssdr4plus","ukidssdr3plus"};//,"ukidssdr2plus","ukidssdr1plus","ukidssdr1","ukidssedrplus","ukidssedr","ukidssr2"}; // array of databases compatible with latest schema for source & detection
    public static final String LATESTUKIDSSSCHEMA = "ukidssdr5plus"; // "ukidssedr";
    public static final String LATESTWORLDSCHEMA = "ukidssdr3plus"; // latest world release have the same schema as this release
    public static final String LATESTNONSURVEYSCHEMA = "ukidssr2"; // all non survey progs have the same schema as this release
    public static final String PRERELEASESERVER="ramses1";//"ahmose";
    public static final String PRERELEASEDATABASE="GES";//"WSA";"WSA copy"
    public static final String PRERELEASECOMMUNITY="prerelease";
    public static final String NONSURVEYCOMMUNITY="nonSurvey";
    public static final String PROPRIETARYCOMMUNITY="Proprietary";
    public static final String SESSIONPROPRIETARYCOMMUNITY="ges"+PROPRIETARYCOMMUNITY;   
    public static String NODBAVAILABLE="No database available";
    
    // ADD new DBS on right of array;
    
    public static String GESDB []={};
    public static String COMMDB []={};
    public static String VHSDB []={};
    public static String VVVDB []={};
    public static String VMCDB []={};
    public static String VIKINGDB []={};
    public static String VIDEODB []={};
    public static String ULTRAVISTADB []={};
    public static String SVORIONDB []={};//{"VISTASVORION","VISTASVORION2"};
    public static String SVNGC253DB []={};
    public static String CALDB []={};
    public static String GCSDB []={"UKIDSSDR5PLUS","UKIDSSDR3PLUS","UKIDSSDR2PLUS"};
    
    public static String SURVEYACRONYMS []= {"GES"};
    public static int GESVERISONSCHEMA=0;
    public static int COMMVERISONSCHEMA=0;
    public static int VHSVERISONSCHEMA=0;
    public static int VVVVERISONSCHEMA=0;
    public static int VMCVERISONSCHEMA=0;
    public static int VIKINGVERISONSCHEMA=0;
    public static int VIDEOVERISONSCHEMA=0;
    public static int ULTRAVISTAVERISONSCHEMA=0;
    public static int SVORIONVERISONSCHEMA=0;
    public static int SVNGC253VERISONSCHEMA=0;
    public static int CALVERSIONSCHEMA=0;
    
    
    public static String ASTROANALYSISWG13="AstroAnalysisWG13";
    public static String GIRAFFEASTROANALYSISWG10="GiraffeAstroAnalysisWG10";
    public static String GIRAFFEASTROANALYSISWG12="GiraffeAstroAnalysisWG12";
    public static String UVESASTROANALYSISWG11="UvesAstroAnalysisWG11";
    public static String UVESASTROANALYSISWG12="UvesAstroAnalysisWG12";
    public static String SINGLESPEC="SingleSpec";
    public static String MANYSPEC="ManySpec";
    
    
    
    
    public static final String [] ALLUKIDSSRDB={"UKIDSSDR5PLUS","UKIDSSDR4PLUS","UKIDSSDR3PLUS","UKIDSSDR2PLUS","UKIDSSDR1PLUS","UKIDSSDR1","UKIDSSEDRPLUS","UKIDSSEDR","UKIDSSSV","UKIDSSR1"}; // names for UKIDSS releaase
    public static final int [] UKIDSSVERSIONS={7,6,5,4,3,3,2,2,1,0}; // version numbers for UKIDSS releaase
    public static final String [] UKIDSSTESTERDB=ALLUKIDSSRDB;
    public static final int VERSIONOFSOURCEVIEWS=99;
    public static final String PTSDB="Transit";
   // public static final String CALDB="Calibration";
    public static final String OPENDB="WFCAMOPENTIME";
    public static final String [] extraDB={PRERELEASEDATABASE};
    public static final String [] moreDB={OPENDB};
    public static final boolean doExtraDB=true;
    public static final String [] UKIDSSDB={"UKIDSSDR5PLUS","UKIDSSDR4PLUS","UKIDSSDR3PLUS","UKIDSSDR2PLUS","UKIDSSDR1PLUS","UKIDSSDR1","UKIDSSEDRPLUS","UKIDSSEDR","UKIDSSSV"};
    
   
    public static final String [] WORLDDB={"UKIDSSDR3PLUS","UKIDSSDR2PLUS","UKIDSSDR1PLUS","UKIDSSDR1","UKIDSSEDRPLUS","UKIDSSEDR","UKIDSSSV"}; //"WORLDR2" names for world releaase
    public static final int [] WORLDVERSIONS={5,4,3,3,2,2,1}; // version numbers for WORLD releaase


  
    public static final String [] PRERELEASEDB={PRERELEASEDATABASE};
    public static final boolean accessToRollingDB=true; // should the archive listing etc give the option of querying a rolling DB 
    public static final String rollingDB="GES_DailySync";//"WSA";"WSA copy"
    public static final String actualRollingDB="GESPROPRIETY";
    public static final String prevRollingDB="GES_DailySync";
    public static final String prevActualRollingDB="GESPROPRIETY";
    
    public static final String [] rollingDBs={rollingDB,prevRollingDB};
    public static final String [] actualRollingDBs={actualRollingDB,prevActualRollingDB};
    
    public static final String rollingServer="amenhotep";//"amenhotep";//"ahmose";
    public static final String rollingDBUser="wsaro";
    public static final String rollingDBPasswd="wsaropw";
    public static final String noAccessDB="sorry no access";

    public static final int COMMISSIONINGPROGRAMMEID=1;
    public static final int CURATIONTESTPROGRAMMEID=99;
    public static final int ALLPROGRAMMEID=0;
    public static final int GESPROGRAMMEID=75;
    public static final int VHSPROGRAMMEID=110;
    public static final int VVVPROGRAMMEID=120;
    public static final int VMCPROGRAMMEID=130;
    public static final int VIKINGPROGRAMMEID=140;
    public static final int VIDEOPROGRAMMEID=150;
    public static final int ULTRAVISTAPROGRAMMEID=160;
    public static final int SVORIONPROGRAMMEID=100;
    public static final int SVNGC253PROGRAMMEID=101;
    public static final int CALPROGRAMMEID=200;
    
    
    public static final String ALLSURVEYS="All GES surveys";
    public static final int MAXIMUMROWSTOFILE=15000000; // maximum number of rows written to file by Queries not used yet
    public static  int FITS_OFFSET=1;
    public static final int VISTANONEFILTERID=0;
    public static final int VISTAZFILTERID=1;
    public static final int VISTAYFILTERID=2;
    public static final int VISTAJFILTERID=3;
    public static final int VISTAHFILTERID=4;
    public static final int VISTAKFILTERID=5;
    public static final int VISTAH2FILTERID=6;
    public static final int VISTABRFILTERID=7;
    public static final int VISTABLANKFILTERID=8;
    public static final int VISTANB118FILTERID=9;
    public static final int VISTANB980985FILTERID=10;
    public static final int VISTANSUNBLINDFILTERID=11;
    

    
    public static final int [] ALLFILTERID= {VISTANONEFILTERID,VISTAZFILTERID,VISTAYFILTERID, VISTAJFILTERID, VISTAHFILTERID,
            VISTAKFILTERID,  VISTABLANKFILTERID, VISTANB118FILTERID,VISTANB980985FILTERID,VISTANSUNBLINDFILTERID};
    
 
    
    
    public static final int [] UKIDSSTESTERPROGS={UKIDSSLASPROGRAMMEID,UKIDSSGPSPROGRAMMEID,UKIDSSGCSPROGRAMMEID,UKIDSSDXSPROGRAMMEID,UKIDSSUDSPROGRAMMEID,
            UKIDSSLASSVPROGRAMMEID,UKIDSSGPSSVPROGRAMMEID,UKIDSSGCSSVPROGRAMMEID,UKIDSSDXSSVPROGRAMMEID,UKIDSSUDSSVPROGRAMMEID,COMMISSIONINGPROGRAMMEID};
    public static final int [] UKIDSSPROGS={UKIDSSLASPROGRAMMEID,UKIDSSGPSPROGRAMMEID,UKIDSSGCSPROGRAMMEID,UKIDSSDXSPROGRAMMEID,UKIDSSUDSPROGRAMMEID};
    public static final int [] WORLDPROGS=UKIDSSPROGS;
    public static final int [] PRERELEASEPROGS=UKIDSSTESTERPROGS;
    
    public static final int [] VISTAPROGS={VHSPROGRAMMEID,VVVPROGRAMMEID,VMCPROGRAMMEID,VIKINGPROGRAMMEID,VIDEOPROGRAMMEID,ULTRAVISTAPROGRAMMEID,CALPROGRAMMEID};
    public static final int [] GESPROGS={GESPROGRAMMEID};
       
    public static final int [] VISTATESTERPROGS= new int[VISTAPROGS.length+1];
    
    public static final int [] GESTESTERPROGS=GESPROGS;
    
    static {
        VISTATESTERPROGS[0]=COMMISSIONINGPROGRAMMEID;
        for (int i=0; i<VISTAPROGS.length; i++) {
            VISTATESTERPROGS[i+1]=VISTAPROGS[i];
        }
    }
   // public static final int [] VISTATESTERPROGS={COMMISSIONINGPROGRAMMEID,VISTAPROGS};
    
    public static final String GESDETECTIONTABLENAME = "gesDetection";
    public static final String COMMDETECTIONTABLENAME = "commDetection";
    public static final String VHSDETECTIONTABLENAME = "vhsDetection";
    public static final String VVVDETECTIONTABLENAME = "vvvDetection";
    public static final String VMCDETECTIONTABLENAME = "vmcDetection";
    public static final String VIKINGDETECTIONTABLENAME = "vikingDetection";
    public static final String VIDEODETECTIONTABLENAME = "videoDetection";
    public static final String ULTRAVISTADETECTIONTABLENAME = "ultravistaDetection";
    public static final String SVORIONDETECTIONTABLENAME = "svOrionDetection";
    public static final String SVNGC253DETECTIONTABLENAME = "svNgc253Detection";
    public static final String CALDETECTIONTABLENAME = "calDetection";
    
    public static final String GESSOURCETABLENAME = "gesSource";
    public static final String COMMSOURCETABLENAME = "commSource";
    public static final String VHSSOURCETABLENAME = "vhsSource";
    public static final String VVVSOURCETABLENAME = "vvvSource";
    public static final String VMCSOURCETABLENAME = "vmcSource";
    public static final String VIKINGSOURCETABLENAME = "vikingSource";
    public static final String VIDEOSOURCETABLENAME = "videoSource";
    public static final String ULTRAVISTASOURCETABLENAME = "ultravistaSource";
    public static final String SVORIONSOURCETABLENAME = "svOrionSource";
    public static final String SVNGC253SOURCETABLENAME = "svNgc253Source";
    public static final String CALSOURCETABLENAME = "NONE";
 
    
    public static final String GESSOURCEVIEWNAME = "undef";
    public static final String COMMSOURCEVIEWNAME = "undef";
    public static final String VHSSOURCEVIEWNAME = "undef";
    public static final String VVVSOURCEVIEWNAME = "undef";
    public static final String VMCSOURCEVIEWNAME = "undef";
    public static final String VIKINGSOURCEVIEWNAME = "undef";
    public static final String VIDEOSOURCEVIEWNAME = "undef";
    public static final String ULTRAVISTASOURCEVIEWNAME = "undef";
    public static final String SVORIONSOURCEVIEWNAME = "undef";
    public static final String SVNGC253SOURCEVIEWNAME = "undef";
    public static final String CALSOURCEVIEWNAME = "undef";
    
    
    public static final String UKIDSSLASSOURCEVIEWNAME = "lasYJHKsource";
    public static final String UKIDSSGPSSOURCEVIEWNAME = "gpsJHKsource";
    public static final String UKIDSSGCSSOURCEVIEWNAME = "gcsZYJHKsource";
    public static final String UKIDSSDXSSOURCEVIEWNAME = "dxsJKSource";
    public static final String UKIDSSUDSSOURCEVIEWNAME = null;
    
    public static final String PTSSOURCETABLENAME = "NONE";
   
    
    public static final String COMMISSIONINGMERGETABLENAME = "commMergeLog";
    public static final String UKIDSSLASMERGETABLENAME = "lasMergeLog";
    public static final String UKIDSSGPSMERGETABLENAME = "gpsMergeLog";
    public static final String UKIDSSGCSMERGETABLENAME = "gcsMergeLog";
    public static final String UKIDSSDXSMERGETABLENAME = "dxsMergeLog";
    public static final String UKIDSSUDSMERGETABLENAME = "udsMergeLog";
    public static final String UKIDSSPTSMERGETABLENAME = "NONE";
    
    public static final String GESMERGETABLENAME = "gesMergeLog";
    public static final String VHSMERGETABLENAME = "vhsMergeLog";
    public static final String VVVMERGETABLENAME = "vvvMergeLog";
    public static final String VMCMERGETABLENAME = "vmcMergeLog";
    public static final String VIKINGMERGETABLENAME = "vikingMergeLog";
    public static final String VIDEOMERGETABLENAME = "videoMergeLog";
    public static final String ULTRAVISTAMERGETABLENAME = "ultravistaMergeLog";
    public static final String SVORIONMERGETABLENAME = "svOrionMergeLog";
    public static final String SVNGC253MERGETABLENAME = "svNgc253MergeLog";
    
    
    
    
    public static final String DEFAULTSQLSERVER = "ramses5";
    public static final String UKIDSSLOGIN = "wsaro";
    public static final String WORLDLOGIN = "worldwsaro";
    public static final String [] WFCAMFILTERS = {"NONE","Z","Y","J","H","K","H2","Br","BLNK","NBJ","NBH","NBK"};
    public static final String [] VISTAFILTERS = {"NONE","Z","Y","J","H","Ks","H2","Br","BLNK","NB118","NB980","SUNBLIND"};
    public static final String [] filters = WFCAMFILTERS; //deprecated
    public static final String [] COMMISSIONINGBands={"Z","Y","J","H","K","H2","Br"};
    //                                                  0 1 2 3 4 5 6 7 8 9
    public static final int [] COMMISSIONINGREQFILTERS={0,1,1,1,1,1,0,0,0,1};
    public static final int [] SVORIONREQFILTERS=      {0,1,1,1,1,1,0,0,0,0};
    public static final int [] SVNGC253REQFILTERS=     {0,1,0,1,0,0,0,0,0,1};
    public static final int [] VHSREQFILTERS=          {0,0,1,1,1,1,0,0,0,0};
    public static final int [] VVVREQFILTERS=          {0,1,1,1,1,1,0,0,0,0};
    public static final int [] VMCREQFILTERS=          {0,0,1,1,0,1,0,0,0,0};
    public static final int [] VIKINGREQFILTERS=       {0,1,1,1,1,1,0,0,0,0};
    public static final int [] VIDEOREQFILTERS=        {0,1,1,1,1,1,0,0,0,0};
    public static final int [] ULTRAVISTAREQFILTERS=   {0,1,1,1,1,1,0,0,0,0};
    public static final int [] CALREQFILTERS=        {0,1,1,1,1,1,0,0,0,1};
    public static final int [] GESREQFILTERS=        {0,1,1,1,1,1,0,0,0,1};
    
    public static final String [] LASRGB={"K","H","Y"};
    public static final String [] GPSRGB={"K","H","J"};
    public static final String [] GCSRGB={"K","H","Z"};
    public static final String [] DXSRGB={"K","H","J"};
    public static final String [] UDSRGB={"K","H","J"};
    
    public static final String [] VHSRGB={"K","H","Y"};
    public static final String [] VVVRGB={"Ks","H","J"};
    
    
    
    public static final String [] VHSBands={"Y","J","H","K"};
    public static final String [] VVVBands={"Z","Y","J","H","Ks"};
    
    
    public static final String [] LASBands={"Y","J_1","J_2","H","K"};
    public static final int [] LASREQFILTERS={0,0,1,2,1,1,0,0,0};
    public static final String [] GPSBands={"J","H","K_1","K_2","H2"};//{"J","H","K_1","K_2","K_3","H2_1","H2_2","H2_3"};
    public static final int [] GPSREQFILTERS={0,0,0,1,1,2,1,0,0};//{0,0,1,1,3,3,0,0};
    public static final int [] GPSREQFILTERSDR2={0,0,1,1,3,3,0,0};
    public static final String [] GCSBands={"Z","Y","J","H","K_1","K_2"};
    public static final int [] GCSREQFILTERS={0,1,1,1,1,2,0,0,0};
    public static final String [] DXSBands={"J","H","K"};
    public static final int [] DXSREQFILTERS={0,0,0,1,1,1,0,0,0};    
    public static final String [] UDSBands={"J","H","K"};
    public static final int [] UDSREQFILTERS={0,0,0,1,1,1,0,0,0};

   
    public static String getPropertyFromFile(String property,String filename){
      
        Properties properties = new Properties();
        try {
             properties.load(new FileInputStream(filename));
             if(properties.getProperty(property) != null) {
                 return properties.getProperty(property);
             }
             return "";
             
        } catch (IOException e) {
          return "";
         }
        }   
    
    public static boolean getDoRollingDBFromFile(String filename) {
    Properties properties = new Properties();
    try {
         properties.load(new FileInputStream(filename));
         if(properties.getProperty("doRollingDB").equalsIgnoreCase("true")) {
             return true;
         }
         return false;
         
    } catch (IOException e) {
      return false;
     }
    }
    public static boolean isProgInDB (String db, int prog) {
        if (getVersionNoOfRelease(db) >= getDetectionSchemaVersion(prog) && getVersionNoOfRelease(db) <= getLastSchemaVersion(prog)) {
            return true;
        }
        else {
            return false;
        }
    }
    public static boolean isSourceInDB (String db, int prog) {
        if (getVersionNoOfRelease(db) >= getSourceSchemaVersion(prog)) {
            return true;
        }
        else {
            return false;
        }
    }
    public static int getVersionNoOfRelease(String schema, int surveyID) {
        
     String [] dbs={};
        switch(surveyID){
        case  GESSchema.GESPROGRAMMEID:
    	    dbs=GESDB;	
    	break;
	case  GESSchema.COMMISSIONINGPROGRAMMEID:
	    dbs=COMMDB;	
	break;
	case  GESSchema.SVORIONPROGRAMMEID:
	    dbs=SVORIONDB;	
	break;
	case  GESSchema.SVNGC253PROGRAMMEID:
	    dbs=SVNGC253DB;
	break;
	case  GESSchema.VHSPROGRAMMEID:
	    dbs=VHSDB;
	break;
	case  GESSchema.VVVPROGRAMMEID:
	    dbs=VVVDB;
	break;
	case  GESSchema.VMCPROGRAMMEID:
	    dbs=VMCDB;
	break;
	case  GESSchema.VIKINGPROGRAMMEID:
	    dbs=VIKINGDB;
	break;
	case  GESSchema.VIDEOPROGRAMMEID:
	    dbs=VIDEODB;
	break;
	case  GESSchema.ULTRAVISTAPROGRAMMEID:
	    dbs=ULTRAVISTADB;
	break;
	case  GESSchema.CALPROGRAMMEID:
	    dbs=CALDB;
	break;
	default :
	    break;
        }
       
        for (int i=0;i < dbs.length; i++) {
            if (schema.equalsIgnoreCase(dbs[i])) {
                return i;
            }
            }
        if (schema.equalsIgnoreCase(rollingDB)) {
            return 9999;
        }
        return -1;
        }
  
    public static int [] getReqFilters(String database,int surveyID){
        switch(surveyID){
        case  GESSchema.GESPROGRAMMEID:
		    return GESREQFILTERS;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		    return COMMISSIONINGREQFILTERS;		
		case  GESSchema.SVORIONPROGRAMMEID:
		    return SVORIONREQFILTERS;	
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return SVNGC253REQFILTERS;
		case  GESSchema.VHSPROGRAMMEID:
		    return VHSREQFILTERS;
		case  GESSchema.VVVPROGRAMMEID:
		    return VVVREQFILTERS;
		case  GESSchema.VMCPROGRAMMEID:
		   return VMCREQFILTERS;
		case  GESSchema.VIKINGPROGRAMMEID:
		    return VIKINGREQFILTERS;
		case  GESSchema.VIDEOPROGRAMMEID:
		    return VIDEOREQFILTERS;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return ULTRAVISTAREQFILTERS;
		case  GESSchema.CALPROGRAMMEID:
		    return CALREQFILTERS;
		case  GESSchema.UKIDSSLASSVPROGRAMMEID:
		    return LASREQFILTERS;
		case  GESSchema.UKIDSSGPSPROGRAMMEID:
		    if (getVersionNoOfRelease(database) >= getVersionNoOfRelease("ukidssdr3plus") || database.equals("") || database == null) {
		        return GPSREQFILTERS;
		    }
		    else {
		        return GPSREQFILTERSDR2;
		    }
		case  GESSchema.UKIDSSGPSSVPROGRAMMEID:
		    if (getVersionNoOfRelease(database) >= getVersionNoOfRelease("ukidssdr3plus")) {
		        return GPSREQFILTERS;
		    }
		    else {
		        return GPSREQFILTERSDR2;
		    }
	
		default :
		return null;
    } 
    }
    public static int [] getReqFilters(int surveyID){
        switch(surveyID){
		case  GESSchema.GESPROGRAMMEID:
		    return GESREQFILTERS;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		    return COMMISSIONINGREQFILTERS;		
		case  GESSchema.SVORIONPROGRAMMEID:
		    return SVORIONREQFILTERS;	
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return SVNGC253REQFILTERS;
		case  GESSchema.VHSPROGRAMMEID:
		    return VHSREQFILTERS;
		case  GESSchema.VVVPROGRAMMEID:
		    return VVVREQFILTERS;
		case  GESSchema.VMCPROGRAMMEID:
		   return VMCREQFILTERS;
		case  GESSchema.VIKINGPROGRAMMEID:
		    return VIKINGREQFILTERS;
		case  GESSchema.VIDEOPROGRAMMEID:
		    return VIDEOREQFILTERS;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return ULTRAVISTAREQFILTERS;
		case  GESSchema.CALPROGRAMMEID:
		    return CALREQFILTERS;
		default :
		return null;
    } 
    }

   
    
   /*
    *   public static final int VHSPROGRAMMEID=110;
    public static final int VVVPROGRAMMEID=120;
    public static final int VMCPROGRAMMEID=120;
    public static final int VIKINGPROGRAMMEID=140;
    public static final int VIDEOPROGRAMMEID=150;
    public static final int ULTRAVISTAPROGRAMMEID=160;
    public static final int SVORIONPROGRAMMEID=100;
    public static final int SVNGC253PROGRAMMEID=101;
    */ 
    public static String [] getDBs(int programmeid,boolean world) {
    	
        switch(programmeid){
        case ALLPROGRAMMEID:
		    if (world) {
		        return null;
		    }
		    else {
		        return PRERELEASEDB;
		    }
		case  GESSchema.GESPROGRAMMEID:
		    if (world) {
		        return WORLDGESDB;
		    }
		    else {
		        return GESDB;
		    }
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		    if (world) {
		        return WORLDCOMMDB;
		    }
		    else {
		        return COMMDB;
		    }
		case  GESSchema.SVORIONPROGRAMMEID:
		    if (world) {
		        return WORLDSVORIONDB;
		    }
		    else {
		        return SVORIONDB;
		    }
		case  GESSchema.SVNGC253PROGRAMMEID:
		    if (world) {
		        return WORLDSVNGC253DB;
		    }
		    else {
		        return SVNGC253DB;
		    }
		case  GESSchema.VHSPROGRAMMEID:
		    if (world) {
		        return WORLDVHSDB;
		    }
		    else {
		        return VHSDB;
		    }
		case  GESSchema.VVVPROGRAMMEID:
		    if (world) {
		        return WORLDVVVDB;
		    }
		    else {
		        return VVVDB;
		    }
		case  GESSchema.VMCPROGRAMMEID:
		    if (world) {
		        return WORLDVMCDB;
		    }
		    else {
		        return VMCDB;
		    }
		case  GESSchema.VIKINGPROGRAMMEID:
		    if (world) {
		        return WORLDVIKINGDB;
		    }
		    else {
		        return VIKINGDB;
		    }
		case  GESSchema.VIDEOPROGRAMMEID:
		    if (world) {
		        return WORLDVIDEODB;
		    }
		    else {
		        return VIDEODB;
		    }
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    if (world) {
		        return WORLDULTRAVISTADB;
		    }
		    else {
		        return ULTRAVISTADB;
		    }
		case  GESSchema.CALPROGRAMMEID:
		    if (world) {
		        return WORLDCALDB;
		    }
		    else {
		        return CALDB;
		    }
		case  WSASchema.UKIDSSGCSPROGRAMMEID:
		    if (world) {
		        return WORLDGCSDB;
		    }
		    else {
		        return GCSDB;
		    }
		
		default :
		return null;
        }
  
    }
    
    
    public static String [] getWorldDBs(int programmeid) {
        switch(programmeid){
        case ALLPROGRAMMEID:
		        return null;
		case  GESSchema.GESPROGRAMMEID:
	        return WORLDGESDB;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		        return WORLDCOMMDB;
	    case  GESSchema.SVORIONPROGRAMMEID:
		        return WORLDSVORIONDB;
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return WORLDSVNGC253DB;
		case  GESSchema.VHSPROGRAMMEID:
		    return WORLDVHSDB;
		case  GESSchema.VVVPROGRAMMEID:
		        return WORLDVVVDB;
		case  GESSchema.VMCPROGRAMMEID:
		        return WORLDVMCDB;
		case  GESSchema.VIKINGPROGRAMMEID:
		        return WORLDVIKINGDB;
		case  GESSchema.VIDEOPROGRAMMEID:
		        return WORLDVIDEODB;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		        return WORLDULTRAVISTADB;
		case  GESSchema.CALPROGRAMMEID:
		        return WORLDCALDB;
		case  WSASchema.UKIDSSGCSPROGRAMMEID:
		        return WORLDGCSDB;
		default :
		return null;
        }
  
    }
    
    
    public static String [] getEquivWorldDBs(int programmeid) {
        switch(programmeid){
        case ALLPROGRAMMEID:
		        return null;
		case  GESSchema.GESPROGRAMMEID:
	        return EQUIVWORLDGESDB;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		        return EQUIVWORLDCOMMDB;
	    case  GESSchema.SVORIONPROGRAMMEID:
		        return EQUIVWORLDSVORIONDB;
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return EQUIVWORLDSVNGC253DB;
		case  GESSchema.VHSPROGRAMMEID:
		    return EQUIVWORLDVHSDB;
		case  GESSchema.VVVPROGRAMMEID:
		        return EQUIVWORLDVVVDB;
		case  GESSchema.VMCPROGRAMMEID:
		        return EQUIVWORLDVMCDB;
		case  GESSchema.VIKINGPROGRAMMEID:
		        return EQUIVWORLDVIKINGDB;
		case  GESSchema.VIDEOPROGRAMMEID:
		        return EQUIVWORLDVIDEODB;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		        return EQUIVWORLDULTRAVISTADB;
		case  GESSchema.CALPROGRAMMEID:
		        return EQUIVWORLDCALDB;
		case  WSASchema.UKIDSSGCSPROGRAMMEID:
		        return EQUIVWORLDGCSDB;
		default :
		return null;
        }
  
    }
    
    public static String [] getDBsPlusRollingDB(String [] inDBs) {
        if (inDBs == null) {
            return null;
        }
        String [] retDBs=new String [inDBs.length+1];
        for (int i=0;i<inDBs.length;i++) {
            retDBs[i]=inDBs[i];
        }
        retDBs[retDBs.length-1]=GESSchema.rollingDB;
        return retDBs;
    }
    
    public static String [] getDBsPlusExtraDB(String [] inDBs, String [] extraDBs) {
        if (doExtraDB) {
        String [] retDBs=new String [inDBs.length+extraDBs.length];
        for (int i=0;i<inDBs.length;i++) {
            retDBs[i]=inDBs[i];
        }
        for (int i=0;i<extraDBs.length;i++) {
            retDBs[inDBs.length+i]=extraDBs[i];
        }
        
        return retDBs;
        } else {
            return inDBs;
        }
    }
    
    public static int getSchemaValidVersion (int progID) {
        switch(progID){
		case  GESSchema.GESPROGRAMMEID:
		    return GESVERISONSCHEMA;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		    return COMMVERISONSCHEMA;		
		case  GESSchema.SVORIONPROGRAMMEID:
		    return SVORIONVERISONSCHEMA;	
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return SVNGC253VERISONSCHEMA;
		case  GESSchema.VHSPROGRAMMEID:
		    return VHSVERISONSCHEMA;
		case  GESSchema.VVVPROGRAMMEID:
		    return VVVVERISONSCHEMA;
		case  GESSchema.VMCPROGRAMMEID:
		   return VMCVERISONSCHEMA;
		case  GESSchema.VIKINGPROGRAMMEID:
		    return VIKINGVERISONSCHEMA;
		case  GESSchema.VIDEOPROGRAMMEID:
		    return VIDEOVERISONSCHEMA;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return ULTRAVISTAVERISONSCHEMA;
		default :
		    return 9999;
        }
    }
    public static String getDefaultList(int[] reqFilters, String table,
            String database, int progID) {
        boolean validSchema=false;
        if (getVersionNoOfRelease(database,progID) >= getSchemaValidVersion(progID)) {
            validSchema=true;           
        }
        database=database.replaceAll("(?i)world","ukidss");
        for (int i=0;i< SCEHMAVALIDDATABASES.length;i++){
            if (database.equalsIgnoreCase(SCEHMAVALIDDATABASES[i])) {
                validSchema=true;
            }
        }
        if (table.toLowerCase().indexOf("detection") >= 0) {
            if (validSchema) {
                return "objID, multiframeID, filterID, RA, Dec, ell, pa, class, psfMag, hallMag,isoMag, petroMag, aperMag2, aperMag3"; //
            } else {
                return table+".*";
            }

        } else if (table.toLowerCase().indexOf("source") >= 0) {
            if (validSchema) {
                StringBuffer sb = new StringBuffer(
                        "sourceID, framesetID, RA, Dec, mergedClass, priOrSec");
                if (reqFilters != null) {
                    sb.append(getReqMags(reqFilters));
                }
                return sb.toString();
            } else {
                return table+".*";
            }
        } else {
            return table+".*";
        }
    }
    
    
    public static String getDefaultList(int [] reqFilters, String table){
       return getDefaultList(reqFilters,table,LATESTUKIDSSSCHEMA);
   
    }
    
        public static String getReqMags(int [] reqFilters){
            StringBuffer sb1=new StringBuffer("");
            for (int i=0;i<reqFilters.length;i++){
                if (reqFilters[i] ==1 ){
                    //sb1.append(", "+getFilterName(i+1)+"HallMag"); 
                    //sb1.append(", "+getFilterName(i+1)+"PetroMag");
                   // sb1.append(", "+getFilterName(i+1)+"AperMag3");
                    sb1.append(", "+getFilterName(i)+"AperMag3");
                    
                    //sb1.append(", "+getFilterName(i+1)+"HallMagErr"); 
                    //sb1.append(", "+getFilterName(i+1)+"PetroMagErr");
                    //sb1.append(", "+getFilterName(i+1)+"AperMag3Err");
                    sb1.append(", "+getFilterName(i)+"AperMag3Err");
                    
                }
                if (reqFilters[i] > 1) {
                    for (int j=0;j<reqFilters[i];j++){
                      //  sb1.append(", "+getFilterName(i+1)+"_"+(j+1)+"HallMag");
                      //  sb1.append(", "+getFilterName(i+1)+"_"+(j+1)+"PetroMag");
                      //  sb1.append(", "+getFilterName(i+1)+"_"+(j+1)+"AperMag3");
                        sb1.append(", "+getFilterName(i)+"_"+(j+1)+"AperMag3");
                      //  sb1.append(", "+getFilterName(i+1)+"_"+(j+1)+"HallMagErr");
                      //  sb1.append(", "+getFilterName(i+1)+"_"+(j+1)+"PetroMagErr");
                       // sb1.append(", "+getFilterName(i+1)+"_"+(j+1)+"AperMag3Err");
                        sb1.append(", "+getFilterName(i)+"_"+(j+1)+"AperMag3Err");
                        
                    }
                }
                
            }
            return sb1.toString();
        }
    
        public static String [] getBands(int [] reqBands){
            int noBands=0;
            for (int i=0;i<reqBands.length;i++){
                noBands=noBands+reqBands[i];
            }
            String [] bands= new String[noBands];
            int bandCount=0;
            for (int i=0;i<reqBands.length;i++){
            if (reqBands[i] ==1 ){
               bands[bandCount]=getFilterName(i);
               bandCount++;
            }
            if (reqBands[i] > 1) {
                for (int j=0; j<reqBands[i];j++){
                    bands[bandCount]=getFilterName(i)+"_"+(j+1);
                    bandCount++;
                }
                
            }
            }
            return bands;
        }
        public static String [] getBands(String database,int surveyID){
            int [] reqBands=getReqFilters(database,surveyID);
            int noBands=0;
            for (int i=0;i<reqBands.length;i++){
                noBands=noBands+reqBands[i];
            }
            String [] bands= new String[noBands];
            int bandCount=0;
            for (int i=0;i<reqBands.length;i++){
            if (reqBands[i] ==1 ){
              // bands[bandCount]=getFilterName(i+1);
               bands[bandCount]=getFilterName(i);
               bandCount++;
            }
            if (reqBands[i] > 1) {
                for (int j=0; j<reqBands[i];j++){
                   // bands[bandCount]=getFilterName(i+1)+"_"+(j+1);
                    bands[bandCount]=getFilterName(i)+"_"+(j+1);
                    bandCount++;
                }
                
            }
            }
            return bands;
        }
    public static String [] getBands(int surveyID){
        switch(surveyID){
    	case  GESSchema.GESPROGRAMMEID:
		    return COMMISSIONINGBands;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		    return COMMISSIONINGBands;
		case  GESSchema.UKIDSSLASPROGRAMMEID:
		    return LASBands;
		case  GESSchema.UKIDSSLASSVPROGRAMMEID:
		    return LASBands;
		case  GESSchema.UKIDSSGPSPROGRAMMEID:
		    return GPSBands;
		case  GESSchema.UKIDSSGPSSVPROGRAMMEID:
		    return GPSBands;
		case  GESSchema.UKIDSSGCSPROGRAMMEID:
		    return GCSBands;
		case  GESSchema.UKIDSSGCSSVPROGRAMMEID:
		    return GCSBands;
		case  GESSchema.UKIDSSDXSPROGRAMMEID:
		    return DXSBands;
		case  GESSchema.UKIDSSDXSSVPROGRAMMEID:
		    return DXSBands;
		case  GESSchema.UKIDSSUDSPROGRAMMEID:
		    return UDSBands;
		case  GESSchema.UKIDSSUDSSVPROGRAMMEID:
		    return UDSBands;
		default :
		return null;
    }
    }
    
    
    
    public static String getMergeTableName(int surveyID){
        String mergeTableName;
        switch(surveyID){
		case  GESSchema.GESPROGRAMMEID:
			mergeTableName=GESMERGETABLENAME;
			break;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
			mergeTableName=COMMISSIONINGMERGETABLENAME;
			break;
		case  GESSchema.VHSPROGRAMMEID:
	    mergeTableName=VHSMERGETABLENAME;
	    break;
		case  GESSchema.VVVPROGRAMMEID:
		    mergeTableName=VVVMERGETABLENAME;
		    break;
		case  GESSchema.VMCPROGRAMMEID:
		    mergeTableName=VMCMERGETABLENAME;
		    break;
		case  GESSchema.VIKINGPROGRAMMEID:
		    mergeTableName=VIKINGMERGETABLENAME;
		    break;
		case  GESSchema.VIDEOPROGRAMMEID:
		    mergeTableName=VIDEOMERGETABLENAME;
		    break;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    mergeTableName=ULTRAVISTAMERGETABLENAME;
		    break;
		case  GESSchema.SVORIONPROGRAMMEID:
		    mergeTableName=SVORIONMERGETABLENAME;
		    break;
		case  GESSchema.SVNGC253PROGRAMMEID:
		    mergeTableName=SVNGC253MERGETABLENAME;
		    break;
		default :
		mergeTableName=null;  
        break;
    }
        return mergeTableName;
    }

    public static int getSourceSchemaVersion(int surveyID){
        int schemaVersion=-1;
        switch(surveyID){
		case  GESSchema.PTSPROGRAMMEID:
			schemaVersion=99999; // change when sourec available
			break;
		case  GESSchema.CALPROGRAMMEID:
			schemaVersion=99999; // change when sourec available
			break;
		default : // all the others have been in from the start
			schemaVersion=-1;  
	        break;
        }
	        return schemaVersion;
    }
    public static int getDetectionSchemaVersion(int surveyID){
        int schemaVersion=-1;
        switch(surveyID){
		case  GESSchema.PTSPROGRAMMEID:
			schemaVersion=-1; // set high as not to be released
			break;
		case  GESSchema.CALPROGRAMMEID:
			schemaVersion=-1; // set high as not to be released
			break;
		default : // all the others have been in from the start
			schemaVersion=-1;  
	        break;
        }
	        return schemaVersion;
    }
    
    public static int getLastSchemaVersion(int surveyID){
        int schemaVersion=99999999;
        switch(surveyID){
/*		case  WSASchema.UKIDSSGPSPROGRAMMEID:
			schemaVersion=5; 
			break;
		case  WSASchema.UKIDSSUDSPROGRAMMEID:
			schemaVersion=5; 
			break;
			*/
		default : // all the others have been in from the start
			schemaVersion=99999999;  
	        break;
        }
	        return schemaVersion;
    }
    
    
    public static String getSourceTableName(int surveyID){
        switch(surveyID){
        case  GESSchema.GESPROGRAMMEID:
			return GESSOURCETABLENAME;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
			return COMMSOURCETABLENAME;
		case  GESSchema.VHSPROGRAMMEID:
		    return VHSSOURCETABLENAME;
		case  GESSchema.VVVPROGRAMMEID:
		    return VVVSOURCETABLENAME;
		case  GESSchema.VMCPROGRAMMEID:
		    return VMCSOURCETABLENAME;
		case  GESSchema.VIKINGPROGRAMMEID:
		    return VIKINGSOURCETABLENAME;		  
		case  GESSchema.VIDEOPROGRAMMEID:
		    return VIDEOSOURCETABLENAME;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return ULTRAVISTASOURCETABLENAME;
		case  GESSchema.SVORIONPROGRAMMEID:
		    return SVORIONSOURCETABLENAME;
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return SVNGC253SOURCETABLENAME;
		case  GESSchema.CALPROGRAMMEID:
		    return CALSOURCETABLENAME;
		default :
		 return null;  
        
    }
        
    }
    
    
    public static String [] getDefaultRGB(int surveyID) {
        String [] RGB=null;
        switch(surveyID){
        case GESSchema.VHSPROGRAMMEID:
        RGB=VHSRGB;
        break;
        case GESSchema.VVVPROGRAMMEID:
        RGB=VVVRGB;
        break;
		case  GESSchema.UKIDSSLASPROGRAMMEID:
	    RGB = LASRGB;
	    break;
		case  GESSchema.UKIDSSGPSPROGRAMMEID:
		RGB = GPSRGB;
		break;
		case  GESSchema.UKIDSSGCSPROGRAMMEID:
		RGB = GCSRGB;
		break;
		case  GESSchema.UKIDSSDXSPROGRAMMEID:
		RGB = DXSRGB;
		break;
		case  GESSchema.UKIDSSUDSPROGRAMMEID:
		RGB = UDSRGB;
	    break;	
		default :  
        break;
        }
        return RGB;
    }
    public static String getSourceViewName(int surveyID){
        
        switch(surveyID){
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
		    return COMMSOURCEVIEWNAME;		
		case  GESSchema.SVORIONPROGRAMMEID:
		    return SVORIONSOURCEVIEWNAME;	
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return SVNGC253SOURCEVIEWNAME;
		case  GESSchema.VHSPROGRAMMEID:
		    return VHSSOURCEVIEWNAME;
		case  GESSchema.VVVPROGRAMMEID:
		    return VVVSOURCEVIEWNAME;
		case  GESSchema.VMCPROGRAMMEID:
		   return VMCSOURCEVIEWNAME;
		case  GESSchema.VIKINGPROGRAMMEID:
		    return VIKINGSOURCEVIEWNAME;
		case  GESSchema.VIDEOPROGRAMMEID:
		    return VIDEOSOURCEVIEWNAME;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return ULTRAVISTASOURCEVIEWNAME;
		case  GESSchema.CALPROGRAMMEID:
		    return CALSOURCEVIEWNAME;
		default :
		return null;
		
    } 
     
        
    }
    public static String getDetectionTableName(int surveyID){
        switch(surveyID){
        case  GESSchema.GESPROGRAMMEID:
			return GESDETECTIONTABLENAME;
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
			return COMMDETECTIONTABLENAME;
		case  GESSchema.VHSPROGRAMMEID:
		    return VHSDETECTIONTABLENAME;
		case  GESSchema.VVVPROGRAMMEID:
		    return VVVDETECTIONTABLENAME;
		case  GESSchema.VMCPROGRAMMEID:
		    return VMCDETECTIONTABLENAME;
		case  GESSchema.VIKINGPROGRAMMEID:
		    return VIKINGDETECTIONTABLENAME;		  
		case  GESSchema.VIDEOPROGRAMMEID:
		    return VIDEODETECTIONTABLENAME;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return ULTRAVISTADETECTIONTABLENAME;
		case  GESSchema.SVORIONPROGRAMMEID:
		    return SVORIONDETECTIONTABLENAME;
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return SVNGC253DETECTIONTABLENAME;
		case  GESSchema.CALPROGRAMMEID:
		    return CALDETECTIONTABLENAME;
		default :
		 return null;  
        
    }
    }
    public static String getShortSurveyName(int surveyID){
        String shortSurveyName;
        switch(surveyID){
        case  GESSchema.GESPROGRAMMEID:
    	    shortSurveyName="GES";
			break;
    	case  GESSchema.COMMISSIONINGPROGRAMMEID:
    	    shortSurveyName="comm";
			break;
		case  GESSchema.VHSPROGRAMMEID:
		    shortSurveyName="VHS";
			break;
			
		case  GESSchema.VVVPROGRAMMEID:
		    shortSurveyName="VVV";
		break;
		case  GESSchema.VMCPROGRAMMEID:
		    shortSurveyName="VMC";
	    break;
		case  GESSchema.VIKINGPROGRAMMEID:
		    shortSurveyName="VIKING";
		break;
		case  GESSchema.VIDEOPROGRAMMEID:
		    shortSurveyName="VIDEO";
			break;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    shortSurveyName="UltraVista";
			break;
		case  GESSchema.SVORIONPROGRAMMEID:
		    shortSurveyName="svOrion";
			break;
		case  GESSchema.SVNGC253PROGRAMMEID:
		    shortSurveyName="svNGC253";
			break;
		case  GESSchema.CALPROGRAMMEID:
		    shortSurveyName="cal";
			break;
		default :
		    shortSurveyName=null;  
        break;
    }
        return shortSurveyName;
    }

    public static String getSurveyName(int surveyID){
        String surveyName;
        switch(surveyID){
     	case  GESSchema.GESPROGRAMMEID:
			surveyName="GAIA-ESO Survey";
			break;
    	case  GESSchema.COMMISSIONINGPROGRAMMEID:
			surveyName="Commissioning programme";
			break;
		case  GESSchema.VHSPROGRAMMEID:
			surveyName="VHS: VISTA Hemisphere Survey";
			break;
			
		case  GESSchema.VVVPROGRAMMEID:
		surveyName="VVV: VISTA Variables in the Via Lactea";
		break;
		case  GESSchema.VMCPROGRAMMEID:
	    surveyName="VMC: VISTA Magellanic Clouds Survey";
	    break;
		case  GESSchema.VIKINGPROGRAMMEID:
		surveyName="VIKING: VISTA Kilo-degree Infrared Galaxy Survey";
		break;
		case  GESSchema.VIDEOPROGRAMMEID:
			surveyName="VIDEO: VISTA Deep Extragalactic Observations";
			break;
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
			surveyName="UltraVISTA: an ultra-deep survey with VISTA";
			break;
		case  GESSchema.SVORIONPROGRAMMEID:
			surveyName="ORION Science Verification data";
			break;
		case  GESSchema.SVNGC253PROGRAMMEID:
			surveyName="NGC253 Science Verification data";
			break;
		case  GESSchema.CALPROGRAMMEID:
			surveyName="Calibration data";
			break;
		case  GESSchema.UKIDSSGCSPROGRAMMEID:
			surveyName="GCS TEST";
			break;
		default :
		surveyName="Survey name not found in lookup";  
        break;
    }
        return surveyName;
    }
    public static String getFilterName(int filterID){
        if (filterID >=0 && filterID <= VISTAFILTERS.length && VISTAFILTERS[filterID] != null ) {
            return VISTAFILTERS[filterID];
        }
        else {
            return "NULL";
        }
  /*      String filterName;
        switch(filterID){        
		case  WSASchema.WFCAMZFILTERID:
		filterName="Z";
		break;     
		case  WSASchema.WFCAMYFILTERID:
		filterName="Y";
		break;
		case  WSASchema.WFCAMJFILTERID:
	    filterName="J";
	    break;
		case  WSASchema.WFCAMHFILTERID:
		filterName="H";
		break;
		case  WSASchema.WFCAMKFILTERID:
			filterName="K";
			break;
		case  WSASchema.WFCAMH2FILTERID:
			filterName="H2";
			break;
		case  WSASchema.WFCAMBRFILTERID:
			filterName="Br";
			break;
		case  WSASchema.WFCAMBLANKFILTERID:
			filterName="BLNK";
			break;
		case  WSASchema.WFCAMNBJFILTERID:
			filterName="BLNK";
			break;
		default :
		filterName="NULL";  
        break;
    }
        return filterName;*/
    }   

    public static String getRequiredFiltersSQL(){
     return "select filterid,npass from requiredfilters";   
    }
    
    
    public static String getProprietaryCommunity(int surveyID,String remoteUser){
        switch(surveyID){
        case  GESSchema.GESPROGRAMMEID:
			return "GES";
		case  GESSchema.COMMISSIONINGPROGRAMMEID:
			return "COMM";
		case  GESSchema.VHSPROGRAMMEID:
		    return "VHS";
		case  GESSchema.VVVPROGRAMMEID:
		    if (remoteUser.toLowerCase().contains("vvve")) {
		        return "VVVE";
		    }
		    else if (remoteUser.toLowerCase().contains("vvvs")) {
		        return "VVVS";
		    }
		    else {
		    return "VVV";
		    }
		case  GESSchema.VMCPROGRAMMEID:
		    return "VMC";
		case  GESSchema.VIKINGPROGRAMMEID:
		    return "VIKING";		  
		case  GESSchema.VIDEOPROGRAMMEID:
		    return "VIDEO";
		case  GESSchema.ULTRAVISTAPROGRAMMEID:
		    return "ULTRAVISTA";
		case  GESSchema.SVORIONPROGRAMMEID:
		    return "SV_ORION";
		case  GESSchema.SVNGC253PROGRAMMEID:
		    return "SV_NGC53";
		case  GESSchema.CALPROGRAMMEID:
		    return "CAL";
		default :
		 return null;  
        
    }
    }
    
    public static int getProgIDFromString(String str){
        if (str !=null) {
        	if (str.toLowerCase().contains("ges")) return GESPROGRAMMEID;
            if (str.toLowerCase().contains("vvv")) return VVVPROGRAMMEID;
            if (str.toLowerCase().contains("vmc")) return VMCPROGRAMMEID;
            if (str.toLowerCase().contains("viking")) return VIKINGPROGRAMMEID;
            if (str.toLowerCase().contains("vhs")) return VHSPROGRAMMEID;
            if (str.toLowerCase().contains("video")) return VIDEOPROGRAMMEID;
            if (str.toLowerCase().contains("ultravista")) return ULTRAVISTAPROGRAMMEID;
            return -9999;
        }
        else {
            return -9999;
        }
       
    }
    
    public static StringBuffer getFramesetSQL(int [] fID,String mergelogTable,String multiframeTable) {
        StringBuffer sbSQL=new StringBuffer("");
        String mfidName=null;
        int npass;
        int filterid;
        int row=0;
        boolean first=true;
        for (int j=0; j<fID.length;j++) {
            filterid=j;
            npass=fID[j];
            row=row+npass;
            if (npass==1) {
                mfidName=GESSchema.getFilterName(filterid)+"mfid";
                if (!first) {
                    sbSQL.append(" or ");
                }
                first=false;
                sbSQL.append(mergelogTable+"."+mfidName+"="+multiframeTable+".multiframeid");
    
            }
            else if (npass > 1){
                for (int i=0; i < npass; i++){
                    mfidName=GESSchema.getFilterName(filterid)+"_"+(i+1)+"mfid";
                    if (!first) {
                        sbSQL.append(" or ");
                    }
                    first=false;
                    sbSQL.append(mergelogTable+"."+mfidName+"="+multiframeTable+".multiframeid");  
                }
            }
           }
        if ( row > 0 ){
            return sbSQL;
            }
            else {
                return null;
            }
        
    }
    
    public static String getCrossIDTableTable(String community, String user, String baseTable, int intProgrammeID) {
        if (community.equalsIgnoreCase("nonSurvey")) {
            return user.trim()+baseTable;
        }
        else
        {
            if (baseTable.equalsIgnoreCase("sourceView")) {
                return GESSchema.getSourceViewName(intProgrammeID);
            }
            else if (baseTable.equalsIgnoreCase("source")) {
            return GESSchema.getSourceTableName(intProgrammeID);
        }
            else if (baseTable.equalsIgnoreCase("detection")) {
                return GESSchema.getDetectionTableName(intProgrammeID);
            }
            return "";
        }          
    }
    public static String getCrossIDDefaultSelect(String community, String tableName, HttpSession session ,int programmeID, String database) {
        if (community.equalsIgnoreCase("nonSurvey")) {
            int [] reqFilters=null;
            if (session.getAttribute("gesreqFilters") !=null){
                reqFilters=((int [])session.getAttribute("gesreqFilters"));
                }
           return GESSchema.getDefaultList(reqFilters,tableName,WSASession.getSchemaVersion(session));
        }
        else
        {
            return GESSchema.getDefaultList(GESSchema.getReqFilters(programmeID),tableName,database,programmeID);
        }
    }
    public static boolean isInAcronyms(String str) {
        for (int i=0; i<SURVEYACRONYMS.length;i++) {
            if (str.equalsIgnoreCase(SURVEYACRONYMS[i])) return true;
        }
        return false;
    }
    public static boolean isProprietary(String community) {
        if (community != null && (isInAcronyms(community) || community.toLowerCase().contains(GESSchema.GESCOMMUNITYPREFIX.toLowerCase()) || community.toLowerCase().contains(GESSchema.PROPRIETARYCOMMUNITY.toLowerCase()))) {
            return true;
        }
        else {
            return false;
        }
    }
    public static StringBuffer getFramesetSQL(ResultSet rset,String mergelogTable,String multiframeTable){
        StringBuffer sbSQL=new StringBuffer("");
        String mfidName=null;
        int npass;
        int filterid;
        int row=0;
        boolean first=true;
       
        try {
        while (rset.next()){
            row++;
           filterid=rset.getInt("filterid");
           npass=rset.getInt("npass");
           if (npass==1) {
               mfidName=GESSchema.getFilterName(filterid)+"mfid";
               if (!first) {
                   sbSQL.append(" or ");
               }
               first=false;
               sbSQL.append(mergelogTable+"."+mfidName+"="+multiframeTable+".multiframeid");
   
           }
           else if (npass > 1){
               for (int i=0; i < npass; i++){
                   mfidName=GESSchema.getFilterName(filterid)+"_"+(i+1)+"mfid";
                   if (!first) {
                       sbSQL.append(" or ");
                   }
                   first=false;
                   sbSQL.append(mergelogTable+"."+mfidName+"="+multiframeTable+".multiframeid");  
               }
           }
        }
        if ( row > 0 ){
        return sbSQL;
        }
        else {
            return null;
        }
        }
        catch (SQLException se){
            return null;
        }
        
    }
   

}

