001 package org.shiftone.jrat.core; 002 003 import org.shiftone.jrat.util.log.Logger; 004 005 /** 006 * This has a bit of a smell to it. 007 * The problem is the system needs to know how it's being executed. In the case of 008 * runtime, it needs to read (and possibly column) files. In the case of desktop, that 009 * would be silly. 010 * The mode can be set multiple times, but once it's read it can not be set. 011 * 012 * @author jeff@shiftone.org (Jeff Drost) 013 */ 014 public class Mode { 015 016 private static final Logger LOG = Logger.getLogger(Mode.class); 017 018 public static final Mode UNKNOWN = new Mode("unknown", false, 0); 019 public static final Mode DESKTOP = new Mode("desktop", false, 1); 020 public static final Mode RUNTIME = new Mode("runtime", true, 2); 021 022 private static Mode current = UNKNOWN; 023 private static boolean locked = false; 024 025 private String name; 026 private boolean environmentLoadingEnabled; 027 private int priority; 028 029 030 public Mode(String name, boolean environmentLoadingEnabled, int priority) { 031 this.name = name; 032 this.environmentLoadingEnabled = environmentLoadingEnabled; 033 this.priority = priority; 034 } 035 036 public String getName() { 037 return name; 038 } 039 040 public boolean isEnvironmentLoadingEnabled() { 041 return environmentLoadingEnabled; 042 } 043 044 // todo - fix this 045 public static void set(Mode newMode) { 046 047 LOG.info("set " + newMode); 048 if (current.priority >= newMode.priority) { 049 050 return; 051 052 } else if (locked) { 053 054 throw new IllegalStateException("mode is locked"); 055 056 } else { 057 058 if (newMode.priority > current.priority) { 059 // the mode can be changed to a higher priority mode 060 current = newMode; 061 } 062 063 } 064 065 } 066 067 public static Mode get() { 068 //LOG.info("get",new Throwable()); 069 if (!locked) { 070 LOG.info("locking"); 071 locked = true; 072 } 073 return current; 074 } 075 076 077 public String toString() { 078 return "Mode[" + name + "]"; 079 } 080 }