001 package sysModel.env; 002 003 import controller.IScrollAdapter; 004 import controller.IDisplayAdapter; 005 import model.ILambda; 006 import sysModel.NoOpLambda; 007 import sysModel.fish.IFishFactory; 008 import sysModel.fish.AFish; 009 import sysModel.parser.Lexer; 010 011 import java.awt.*; 012 import java.io.PrintWriter; 013 014 /** 015 * Dummy environment used if no other environment has been created or loaded yet. 016 * 017 * @author Mathias Ricken 018 */ 019 public class NullEnv extends AGlobalEnv { 020 /** 021 * Singleton instance. 022 */ 023 private static NullEnv _instance; 024 025 /** 026 * Return singleton instance. 027 * 028 * @return singleton instance 029 */ 030 public static synchronized NullEnv instance() { 031 if (null == _instance) { 032 _instance = new NullEnv(); 033 } 034 return _instance; 035 } 036 037 /** 038 * Private singleton constructor. 039 */ 040 private NullEnv() { 041 super(null, null); 042 } 043 044 /** 045 * Add the fish to the global environment. 046 * 047 * @param localEnv local environment 048 * @param fish fish to add 049 */ 050 public void addFishToInternalData(ALocalEnv localEnv, AFish fish) { 051 } 052 053 /** 054 * Remove the fish from the global environment. 055 * 056 * @param localEnv local environment 057 */ 058 protected void removeFishFromInternalData(ALocalEnv localEnv) { 059 } 060 061 /** 062 * Edit the fish. 063 * 064 * @param localEnv local environment 065 * @param fishFactory 066 * @param button 067 * @return lambda to edit the fish 068 */ 069 public ILambda editFish(ALocalEnv localEnv, IFishFactory fishFactory, int button) { 070 return NoOpLambda.instance(); 071 } 072 073 /** 074 * Create a local environment for the position. 075 * 076 * @param p position 077 * @return local environment 078 */ 079 public ALocalEnv makeLocalEnv(Point.Double p) { 080 return null; 081 } 082 083 /** 084 * Factory method for parsing a stream of tokens and creating a global environment from it. 085 * 086 * @param l lexer 087 * @return new global environment 088 */ 089 public AGlobalEnv parseEnvironment(Lexer l) { 090 return NullEnv.instance(); 091 } 092 093 /** 094 * Parse fish and add them to the environment. 095 * 096 * @param l parser to read from 097 */ 098 protected void parseFish(Lexer l) { 099 } 100 101 /** 102 * Get the environment settings class. 103 * 104 * @return environment settings class 105 */ 106 public AEnvFactory makeEnvFactory() { 107 return new AEnvFactory() { 108 public AGlobalEnv create() { 109 return NullEnv.instance(); 110 } 111 112 public String toString() { 113 return NullEnv.class.getName(); 114 } 115 }; 116 } 117 118 /** 119 * Print file header. 120 * 121 * @param pw PrintWriter to use 122 */ 123 protected void printHeader(PrintWriter pw) { 124 } 125 126 /** 127 * Get size of the display. 128 * 129 * @return size of the display in model coordinate units. 130 */ 131 public Dimension getDisplaySize() { 132 return new Dimension(); 133 } 134 135 /** 136 * The action to be executed if the display should return home. 137 * 138 * @param sa scroll adapter 139 */ 140 public void returnHome(IScrollAdapter sa) { 141 } 142 143 /** 144 * Ask the model where to scroll, given where the user has scrolled. If the environment just acts like a normal 145 * panal, it should return pos without modification. If the environment recenters, it should return a position in 146 * the middle of the pan area. All coordinates are in model coordinate units. 147 * 148 * @param pos position where the user scrolled to 149 * @return position where the environment wants the view to be 150 * @see IDisplayAdapter#getPanDelta 151 */ 152 public Point.Double getViewPosition(Point.Double pos) { 153 // the panel always gets recentered after moving it, so return the center position 154 return new Point.Double(); 155 } 156 157 /** 158 * Ask the model how much to pan, given where the user scrolled. If the environment just acts like a normal panal, 159 * it should return (0,0). If the environment recenters, it should return delta without modification. All 160 * coordinates are in model coordinate units. 161 * 162 * @param delta how far the user scrolled 163 * @return how far the panel should scroll 164 * @see IDisplayAdapter#getViewPosition 165 */ 166 public Point.Double getPanDelta(Point.Double delta) { 167 // we want the panel to keep track of the position, so return the delta as pan value 168 return new Point.Double(); 169 } 170 171 /** 172 * Get a tool tip description for a specific place in the environment. 173 * 174 * @param p mouse coordinates 175 * @return lambda for the simulation controller to execute. Must return the tooltip string. 176 */ 177 public ILambda getToolTipText(Point.Double p) { 178 return new ILambda() { 179 public Object apply(Object param) { 180 return ""; 181 } 182 }; 183 } 184 }